From: yoe Date: Thu, 24 Jul 2008 11:24:40 +0000 (+0000) Subject: r339: Explicitly set the client socket to nonblocking, since some systems X-Git-Url: http://git.alex.org.uk r339: Explicitly set the client socket to nonblocking, since some systems apparently inherit socket flags through accept(). --- 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;