summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorSimon Rettberg2015-01-06 23:10:02 +0100
committerSimon Rettberg2015-01-06 23:10:02 +0100
commita4dec329802619a9d3d0f80b037ccce9e18ffe0a (patch)
tree05d6325e2f48b830ab9812104ce82ed50778bb17 /src/server/net.c
parent[SERVER] Big code cleanup, refactoring, minor bugfixing (diff)
downloaddnbd3-a4dec329802619a9d3d0f80b037ccce9e18ffe0a.tar.gz
dnbd3-a4dec329802619a9d3d0f80b037ccce9e18ffe0a.tar.xz
dnbd3-a4dec329802619a9d3d0f80b037ccce9e18ffe0a.zip
[SERVER] Get rid of epoll in alservers.c, make valgrind+gdb happy by handling signals even though we block them
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c3
1 files changed, 2 insertions, 1 deletions
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: