r339: Explicitly set the client socket to nonblocking, since some systems
authoryoe <yoe>
Thu, 24 Jul 2008 11:24:40 +0000 (11:24 +0000)
committeryoe <yoe>
Thu, 24 Jul 2008 11:24:40 +0000 (11:24 +0000)
apparently inherit socket flags through accept().

nbd-server.c

index 8f44c24..5425eb5 100644 (file)
@@ -1421,9 +1421,16 @@ int serveloop(GArray* servers) {
                        for(i=0;i<servers->len;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;