From: Fredrik Tolf Date: Wed, 17 Dec 2008 02:16:43 +0000 (+0100) Subject: Use SOCK_SEQPACKET between processes to ensure EOF receipt. Probably only works on... X-Git-Tag: 0.1~134 X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=commitdiff_plain;h=820f91371d71ceeef86ecb141c86763065397e85 Use SOCK_SEQPACKET between processes to ensure EOF receipt. Probably only works on Linux, however. --- diff --git a/lib/proc.c b/lib/proc.c index f7b0d9b..efd2767 100644 --- a/lib/proc.c +++ b/lib/proc.c @@ -35,7 +35,7 @@ int stdmkchild(char **argv) pid_t pid; int fd[2]; - if(socketpair(PF_UNIX, SOCK_DGRAM, 0, fd)) + if(socketpair(PF_UNIX, SOCK_SEQPACKET, 0, fd)) return(-1); if((pid = fork()) < 0) return(-1); @@ -98,8 +98,10 @@ int recvfd(int sock, char **data, size_t *datalen) msg.msg_controllen = sizeof(cbuf); ret = recvmsg(sock, &msg, 0); - if(ret < 0) { + if(ret <= 0) { free(buf); + if(ret == 0) + errno = 0; return(-1); }