From c7abefc668b1351ded4a58b93f78e84c62be1684 Mon Sep 17 00:00:00 2001 From: Matthias Andree Date: Fri, 13 May 2011 13:15:03 +0200 Subject: SockOpen(): set SO_KEEPALIVE. --- NEWS | 3 +++ socket.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/NEWS b/NEWS index f6060ab1..a7215790 100644 --- a/NEWS +++ b/NEWS @@ -67,6 +67,9 @@ fetchmail-6.3.20 (not yet released): * fetchmail now supports an environment variable to suppress marking deleted messages as seen at the same time, FETCHMAIL_IMAP_DELETED_REMAINS_UNSEEN. See the manual page for details. Requested by Jonathan Buschmann. +* fetchmail sets Internet domain sockets to "keepalive" mode now. Note that + there is no portable way to configure actual timeouts for this mode, and some + systems only support a system-wide timeout setting. # BUG FIXES * Call strlen() only once when removing CRLF from a line. (Sunil Shetye) diff --git a/socket.c b/socket.c index 930e1b0d..5573b4ee 100644 --- a/socket.c +++ b/socket.c @@ -225,6 +225,12 @@ int SockTimeout(int sock, int timeout) return err; } +/** Set socket to SO_KEEPALIVE. \return 0 for success. */ +int SockKeepalive(int sock) { + int keepalive = 1; + return setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof keepalive); +} + int UnixOpen(const char *path) { int sock = -1; @@ -319,6 +325,9 @@ int SockOpen(const char *host, const char *service, continue; } + SockTimeout(i, mytimeout); + SockKeepalive(i); + /* Save socket descriptor. * Used to close the socket after connect timeout. */ mailserver_socket_temp = i; -- cgit v1.2.3