From 0e1072fdf590964799646fd7477bec56ebeb6f22 Mon Sep 17 00:00:00 2001 From: yoe Date: Thu, 24 Jul 2008 11:24:40 +0000 Subject: [PATCH] r339: Explicitly set the client socket to nonblocking, since some systems apparently inherit socket flags through accept(). --- nbd-server.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nbd-server.c b/nbd-server.c index 8f44c24..5425eb5 100644 --- a/nbd-server.c +++ b/nbd-server.c @@ -1421,9 +1421,16 @@ int serveloop(GArray* servers) { for(i=0;ilen;i++) { serve=&(g_array_index(servers, SERVER, i)); if(FD_ISSET(serve->socket, &rset)) { + int sock_flags; if ((net=accept(serve->socket, (struct sockaddr *) &addrin, &addrinlen)) < 0) err("accept: %m"); + if((sock_flags = fcntl(net, F_GETFL, 0))==-1) { + err("fcntl F_GETFL"); + } + if(fcntl(net, F_SETFL, sock_flags &~O_NONBLOCK)==-1) { + err("fcntl F_SETFL ~O_NONBLOCK"); + } client = g_malloc(sizeof(CLIENT)); client->server=serve; client->exportsize=OFFT_MAX; -- 1.7.10.4