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:
parent
25e2cc330c
commit
0b9a74c290
@ -1539,6 +1539,7 @@ void handle_connection (int fd, union sockaddr_union* addr)
|
|||||||
ssize_t i;
|
ssize_t i;
|
||||||
struct conn_s *connptr;
|
struct conn_s *connptr;
|
||||||
struct request_s *request = NULL;
|
struct request_s *request = NULL;
|
||||||
|
struct timeval tv;
|
||||||
hashmap_t hashofheaders = NULL;
|
hashmap_t hashofheaders = NULL;
|
||||||
|
|
||||||
char sock_ipaddr[IP_LENGTH];
|
char sock_ipaddr[IP_LENGTH];
|
||||||
@ -1561,6 +1562,13 @@ void handle_connection (int fd, union sockaddr_union* addr)
|
|||||||
return;
|
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)) {
|
if (connection_loops (addr)) {
|
||||||
log_message (LOG_CONN,
|
log_message (LOG_CONN,
|
||||||
"Prevented endless loop (file descriptor %d): %s",
|
"Prevented endless loop (file descriptor %d): %s",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user