From a4dec329802619a9d3d0f80b037ccce9e18ffe0a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 6 Jan 2015 23:10:02 +0100 Subject: [SERVER] Get rid of epoll in alservers.c, make valgrind+gdb happy by handling signals even though we block them --- src/server/net.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/server/net.c') diff --git a/src/server/net.c b/src/server/net.c index 5a9a640..3dfa231 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -49,7 +49,7 @@ static inline bool recv_request_header(int sock, dnbd3_request_t *request) int ret, fails = 0; // Read request header from socket while ( (ret = recv( sock, request, sizeof(*request), MSG_WAITALL )) != sizeof(*request) ) { - if ( errno == EINTR ) continue; + if ( errno == EINTR && ++fails < 10 ) continue; if ( ret >= 0 || ++fails > SOCKET_TIMEOUT_SERVER_RETRIES ) return false; if ( errno == EAGAIN ) continue; printf( "[DEBUG] Error receiving request: Could not read message header (%d/%d, e=%d)\n", ret, (int)sizeof(*request), errno ); @@ -196,6 +196,7 @@ void *net_client_handler(void *dnbd3_client) } // client handling mainloop while ( recv_request_header( client->sock, &request ) ) { + if ( _shutdown ) break; switch ( request.cmd ) { case CMD_GET_BLOCK: -- cgit v1.2.3-55-g7522