From f2674766ca8b0f2ba3c4685b4d4b53ba7735ec2e Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Fri, 6 Feb 2015 14:52:09 -0800 Subject: [PATCH] SOCK: Add TCP keepalive support to all incoming and outgoing TCP sockets. This allows detection of network failures when there is no traffic across established circuits, --- sim_sock.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sim_sock.c b/sim_sock.c index f41e0f6c..94df8414 100644 --- a/sim_sock.c +++ b/sim_sock.c @@ -1015,7 +1015,14 @@ if ((sta == SOCKET_ERROR) && (WSAGetLastError () != WSAEWOULDBLOCK) && (WSAGetLastError () != WSAEINPROGRESS)) return sim_err_sock (newsock, "connect", 1); +if (!datagram) { + int keepalive = 1; + /* enable TCP Keep Alives */ + sta = setsockopt (newsock, SOL_SOCKET, SO_KEEPALIVE, (char *)&keepalive, sizeof(keepalive)); + if (sta == -1) + return sim_err_sock (newsock, "setsockopt KEEPALIVE", 1); + } return newsock; /* got it! */ } @@ -1027,6 +1034,7 @@ return sim_accept_conn_ex (master, connectaddr, FALSE); SOCKET sim_accept_conn_ex (SOCKET master, char **connectaddr, t_bool nodelay) { int32 sta, err; +int keepalive = 1; #if defined (macintosh) || defined (__linux) || defined (__linux__) || \ defined (__APPLE__) || defined (__OpenBSD__) || \ defined(__NetBSD__) || defined(__FreeBSD__) || \ @@ -1076,6 +1084,11 @@ if (nodelay) { return sim_err_sock (newsock, "setnodelay", 0); } +/* enable TCP Keep Alives */ +sta = setsockopt (newsock, SOL_SOCKET, SO_KEEPALIVE, (char *)&keepalive, sizeof(keepalive)); +if (sta == -1) + return sim_err_sock (newsock, "setsockopt KEEPALIVE", 1); + return newsock; }