apply tcp keepalive to serving sockets

This commit is contained in:
James F. Carter
2018-01-10 13:49:22 +00:00
parent 24f1e62a73
commit 1d5b315f17
4 changed files with 49 additions and 0 deletions

View File

@@ -68,6 +68,34 @@ int sock_set_reuseaddr( int fd, int optval )
return setsockopt( fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval) );
}
int sock_set_keepalive_params( int fd, int time, int intvl, int probes)
{
return sock_set_keepalive(fd, 1) ||
sock_set_tcp_keepidle(fd, time) ||
sock_set_tcp_keepintvl(fd, intvl) ||
sock_set_tcp_keepcnt(fd, probes);
}
int sock_set_keepalive( int fd, int optval )
{
return setsockopt( fd, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval) );
}
int sock_set_tcp_keepidle( int fd, int optval )
{
return setsockopt( fd, IPPROTO_TCP, TCP_KEEPIDLE, &optval, sizeof(optval) );
}
int sock_set_tcp_keepintvl( int fd, int optval )
{
return setsockopt( fd, IPPROTO_TCP, TCP_KEEPINTVL, &optval, sizeof(optval) );
}
int sock_set_tcp_keepcnt( int fd, int optval )
{
return setsockopt( fd, IPPROTO_TCP, TCP_KEEPCNT, &optval, sizeof(optval) );
}
/* Set the tcp_nodelay option */
int sock_set_tcp_nodelay( int fd, int optval )
{

View File

@@ -14,9 +14,24 @@ size_t sockaddr_size(const struct sockaddr* sa);
*/
const char* sockaddr_address_string(const struct sockaddr* sa, char* dest, size_t len);
/* Configure TCP keepalive on a socket */
int sock_set_keepalive_params( int fd, int time, int intvl, int probes);
/* Set the SOL_KEEPALIVE otion */
int sock_set_keepalive(int fd, int optval);
/* Set the SOL_REUSEADDR otion */
int sock_set_reuseaddr(int fd, int optval);
/* Set the tcp_keepidle option */
int sock_set_tcp_keepidle(int fd, int optval);
/* Set the tcp_keepintvl option */
int sock_set_tcp_keepintvl(int fd, int optval);
/* Set the tcp_keepcnt option */
int sock_set_tcp_keepcnt(int fd, int optval);
/* Set the tcp_nodelay option */
int sock_set_tcp_nodelay(int fd, int optval);