diff --git a/fanout.c b/fanout.c index bb79ccc55b85010547ffc2d4071c23a803ca7a27..0246bb2eafdd5a9b053223b89a3d7a435c5b4843 100644 --- a/fanout.c +++ b/fanout.c @@ -138,7 +138,8 @@ int main (int argc, char *argv[]) { int srvsock, epollfd, nfds, efd, n, res; int portno = 1986; - u_int yes = 1; + int optval; + socklen_t optlen = sizeof(optval); u_int listen_backlog = 25; u_int max_events = 25; FILE *pidfile; @@ -310,7 +311,10 @@ fs.file-max=100000\n"); serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons (portno); - setsockopt (srvsock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof (yes)); + if ((setsockopt (srvsock, SOL_SOCKET, SO_REUSEADDR, &optval, optlen)) == -1) + fanout_error ("failed setting reuseaddr"); + if ((setsockopt (srvsock, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen)) == -1) + fanout_error ("failed setting keepalive"); if (bind (srvsock, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) { @@ -516,6 +520,7 @@ resetting counter\n"); clients_count = 0; } clients_count++; + } else { // Process events of other sockets... client_i = client_head;