Make sure the process socket is non-blocking.
Don't fail if nothing ready on recvmsg for a file descriptor.

diff --git a/server/request.c b/server/request.c
index 348db97..cddf438 100644
--- a/server/request.c
+++ b/server/request.c
@@ -262,7 +262,9 @@
 
     if (ret >= 0)
     {
-        fprintf( stderr, "Protocol error: process %p: partial recvmsg %d for fd\n", process, ret );
+        if (ret > 0)
+            fprintf( stderr, "Protocol error: process %p: partial recvmsg %d for fd\n",
+                     process, ret );
         kill_process( process, NULL, 1 );
     }
     else
@@ -303,7 +305,8 @@
 
     if (ret >= 0)
     {
-        fprintf( stderr, "Protocol error: process %p: partial sendmsg %d\n", process, ret );
+        if (ret > 0)
+            fprintf( stderr, "Protocol error: process %p: partial sendmsg %d\n", process, ret );
         kill_process( process, NULL, 1 );
     }
     else
@@ -341,7 +344,9 @@
         struct sockaddr_un dummy;
         int len = sizeof(dummy);
         int client = accept( master_socket->obj.fd, (struct sockaddr *) &dummy, &len );
-        if (client != -1) create_process( client );
+        if (client == -1) return;
+        fcntl( client, F_SETFL, O_NONBLOCK );
+        create_process( client );
     }
 }