From 1e52d207aca21c8fa39f99fdf3ce559af6370ae2 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 15 May 2020 10:07:14 -0400 Subject: Enable TCP keepalive with half-hour idle Since we swallow IRC PINGs, a client connection can go hours idle on a quiet network. On my home internet, at least, these connections seem to get silently dropped. --- local.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'local.c') diff --git a/local.c b/local.c index 0a140e6..50e49d5 100644 --- a/local.c +++ b/local.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -218,6 +219,13 @@ struct tls *localAccept(int *fd, int bind) { int error = setsockopt(*fd, SOL_SOCKET, SO_NOSIGPIPE, &yes, sizeof(yes)); if (error) err(EX_OSERR, "setsockopt"); + error = setsockopt(*fd, SOL_SOCKET, SO_KEEPALIVE, &yes, sizeof(yes)); + if (error) err(EX_OSERR, "setsockopt"); + + int idle = 15 * 60; + error = setsockopt(*fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle)); + if (error) err(EX_OSERR, "setsockopt"); + struct tls *client; error = tls_accept_socket(server, &client, *fd); if (error) errx(EX_SOFTWARE, "tls_accept_socket: %s", tls_error(server)); -- cgit 1.4.1