summaryrefslogtreecommitdiff
path: root/src/libunixonacid/unixmessage_receive.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2014-12-31 16:27:44 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2014-12-31 16:27:44 +0000
commit131a18f68dc73f208bb76a944fc6d42c86cfad3b (patch)
tree3f0d007b4d2932d2131723796289a70bf630d3ff /src/libunixonacid/unixmessage_receive.c
parent9d417556de94429896d5496190b15caac659597e (diff)
downloadskalibs-131a18f68dc73f208bb76a944fc6d42c86cfad3b.tar.xz
Safe wrappers around sendmsg and recvmsg in unixmessage primitives
Diffstat (limited to 'src/libunixonacid/unixmessage_receive.c')
-rw-r--r--src/libunixonacid/unixmessage_receive.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libunixonacid/unixmessage_receive.c b/src/libunixonacid/unixmessage_receive.c
index d25195b..21491fa 100644
--- a/src/libunixonacid/unixmessage_receive.c
+++ b/src/libunixonacid/unixmessage_receive.c
@@ -49,7 +49,7 @@ static int unixmessage_receiver_fill (unixmessage_receiver_t *b)
.msg_controllen = sizeof(ancilbuf)
} ;
unsigned int auxlen ;
- int r ;
+ int r = -1 ;
if (cbuffer_isfull(&b->mainb) || cbuffer_isfull(&b->auxb))
return (errno = ENOBUFS, -1) ;
{
@@ -57,8 +57,11 @@ static int unixmessage_receiver_fill (unixmessage_receiver_t *b)
cbuffer_wpeek(&b->mainb, v) ;
iovec_from_siovec(iov, v, 2) ;
}
- r = recvmsg(b->fd, &msghdr, awesomeflags) ;
- if (r <= 0) return r ;
+ while (r < 0)
+ {
+ r = recvmsg(b->fd, &msghdr, awesomeflags) ;
+ if (!r || (r < 0 && errno != EINTR)) return r ;
+ }
{
struct cmsghdr *c = CMSG_FIRSTHDR(&msghdr) ;
if (c)