From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Wed, 2 Mar 2016 12:24:11 +0100 Subject: [PATCH] Always enable TCP keepalive Always enabled, hardcoded interval as per https://bugzilla.redhat.com/show_bug.cgi?id=1298590 --- server/reds.c | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/server/reds.c b/server/reds.c index a28027e..a848828 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2876,6 +2876,31 @@ static void reds_handle_ssl_accept(int fd, int event, void *data) reds_handle_new_link(link); } +#define KEEPALIVE_TIMEOUT (10*60) + +static bool reds_init_keepalive(int socket) +{ + int keepalive = 1; + int keepalive_timeout = KEEPALIVE_TIMEOUT; + + if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)) == -1) { + if (errno != ENOTSUP) { + spice_printerr("setsockopt for keepalive failed, %s", strerror(errno)); + return false; + } + } + + if (setsockopt(socket, SOL_TCP, TCP_KEEPIDLE, + &keepalive_timeout, sizeof(keepalive_timeout)) == -1) { + if (errno != ENOTSUP) { + spice_printerr("setsockopt for keepalive timeout failed, %s", strerror(errno)); + return false; + } + } + + return true; +} + static RedLinkInfo *reds_init_client_connection(int socket) { RedLinkInfo *link; @@ -2899,20 +2924,7 @@ static RedLinkInfo *reds_init_client_connection(int socket) } } - if (reds->keepalive_timeout > 0) { - int keepalive = 1; - if (setsockopt(socket, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)) == -1) { - if (errno != ENOTSUP) { - spice_printerr("setsockopt for keepalive failed, %s", strerror(errno)); - } - } - if (setsockopt(socket, SOL_TCP, TCP_KEEPIDLE, - &reds->keepalive_timeout, sizeof(reds->keepalive_timeout)) == -1) { - if (errno != ENOTSUP) { - spice_printerr("setsockopt for keepalive timeout failed, %s", strerror(errno)); - } - } - } + reds_init_keepalive(socket); link = spice_new0(RedLinkInfo, 1); stream = spice_new0(RedsStream, 1);