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 );
}
}