From 8d75833aacaa6c5aebd4014c79ace5633d6dabf3 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 2 Jul 2014 16:00:15 +0200 Subject: Shut down server process nicely on SIGINT. Reopen logfile on SIGHUP --- src/socket.cc | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'src/socket.cc') diff --git a/src/socket.cc b/src/socket.cc index 1fffc87..349ec30 100644 --- a/src/socket.cc +++ b/src/socket.cc @@ -100,9 +100,31 @@ Socket Socket::slisten() // accept new connection and get its connection descriptor int csalen = sizeof(s.socketaddr); - s.ssocket = accept(ssocket, - (struct sockaddr*)&s.socketaddr, - (socklen_t*)&csalen); + { + fd_set rfds; + FD_ZERO(&rfds); + FD_SET(ssocket, &rfds); + int retval = select(ssocket + 1, &rfds, NULL, NULL, NULL); + + if (retval == -1) { + if(errno == EINTR) { + connected = true; + s.connected = true; + return s; + } + + ERR(socket, "select() failed! %s", strerror(errno)); + } else if(retval) { + if(FD_ISSET(ssocket, &rfds)) { + s.ssocket = accept(ssocket, + (struct sockaddr*)&s.socketaddr, + (socklen_t*)&csalen); + ERR(socket, "accept() failed! %s", strerror(errno)); + } + } else { + // We don't do timeout + } + } if (s.ssocket < 0) { s.connected = false; -- cgit v1.2.3