diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2012-03-28 09:20:38 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2012-03-28 09:20:38 +0200 |
commit | 9c7e081f51063b6cdb4674f4d2e6c4eab502a327 (patch) | |
tree | 25c46150eee45e6ad327b2e5e92fd8802fff72a5 /src/ip.cpp | |
parent | e440e55d45a571c221af9c1657a2006597a6b88f (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.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -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_) |