enforce socket timeout on new sockets via setsockopt()

the timeout option set by the config file wasn't respected at all
so it could happen that connections became stale and were never released,
which eventually caused tinyproxy to hit the limit of open connections and
never accepting new ones.

addresses #274
This commit is contained in:
rofl0r 2020-07-15 09:59:25 +01:00
parent 25e2cc330c
commit 0b9a74c290

View File

@ -1539,6 +1539,7 @@ void handle_connection (int fd, union sockaddr_union* addr)
ssize_t i;
struct conn_s *connptr;
struct request_s *request = NULL;
struct timeval tv;
hashmap_t hashofheaders = NULL;
char sock_ipaddr[IP_LENGTH];
@ -1561,6 +1562,13 @@ void handle_connection (int fd, union sockaddr_union* addr)
return;
}
tv.tv_usec = 0;
tv.tv_sec = config->idletimeout;
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (void*) &tv, sizeof(tv));
tv.tv_usec = 0;
tv.tv_sec = config->idletimeout;
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (void*) &tv, sizeof(tv));
if (connection_loops (addr)) {
log_message (LOG_CONN,
"Prevented endless loop (file descriptor %d): %s",