From 820f91371d71ceeef86ecb141c86763065397e85 Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Wed, 17 Dec 2008 03:16:43 +0100 Subject: [PATCH] Use SOCK_SEQPACKET between processes to ensure EOF receipt. Probably only works on Linux, however. --- lib/proc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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); } -- 2.11.0