summaryrefslogtreecommitdiff
path: root/src/ip.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2012-03-28 09:20:38 +0200
committerMartin Sustrik <sustrik@250bpm.com>2012-03-28 09:20:38 +0200
commit9c7e081f51063b6cdb4674f4d2e6c4eab502a327 (patch)
tree25c46150eee45e6ad327b2e5e92fd8802fff72a5 /src/ip.cpp
parente440e55d45a571c221af9c1657a2006597a6b88f (diff)
XS_KEEPALIVE options added
This option allows to turn on TCP keepalives on the underlying connections. Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/ip.cpp')
-rw-r--r--src/ip.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/ip.cpp b/src/ip.cpp
index 1eca352..bae8d7e 100644
--- a/src/ip.cpp
+++ b/src/ip.cpp
@@ -60,7 +60,7 @@ xs::fd_t xs::open_socket (int domain_, int type_, int protocol_)
return s;
}
-void xs::tune_tcp_socket (fd_t s_)
+void xs::tune_tcp_socket (fd_t s_, bool keepalive_)
{
// Disable Nagle's algorithm. We are doing data batching on Crossroads
// level, so using Nagle wouldn't improve throughput in anyway, but it
@@ -81,6 +81,17 @@ void xs::tune_tcp_socket (fd_t s_)
sizeof (int));
errno_assert (rc != SOCKET_ERROR);
#endif
+
+ if (keepalive_) {
+ int keepalive = 1;
+ int rc = setsockopt (s_, SOL_SOCKET, SO_KEEPALIVE, (char*) &keepalive,
+ sizeof (int));
+#ifdef XS_HAVE_WINDOWS
+ wsa_assert (rc != SOCKET_ERROR);
+#else
+ errno_assert (rc == 0);
+#endif
+ }
}
void xs::unblock_socket (fd_t s_)