From 31009f586a04251df0fb5853017ecfcaf70b307f Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Sun, 21 Dec 2014 01:43:39 +0000 Subject: So MSG_WAITALL can block even with MSG_DONTWAIT... wtfbsdseriously. Only include MSG_WAITALL when it's tested nb, then. Also test yet another fix for the tryancilautoclose FreeBSD problem. --- src/libunixonacid/unixmessage_receive.c | 13 ++++++++++--- src/libunixonacid/unixmessage_sender_flush.c | 3 +++ src/sysdeps/tryancilautoclose.c | 19 ++++++------------- 3 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/libunixonacid/unixmessage_receive.c b/src/libunixonacid/unixmessage_receive.c index 5c80082..d25195b 100644 --- a/src/libunixonacid/unixmessage_receive.c +++ b/src/libunixonacid/unixmessage_receive.c @@ -16,14 +16,21 @@ static int const awesomeflags = #ifdef SKALIBS_HASMSGDONTWAIT - MSG_WAITALL | MSG_DONTWAIT -#elif defined (SKALIBS_HASNBWAITALL) + MSG_DONTWAIT +#else + 0 +#endif + | +#ifdef SKALIBS_HASNBWAITALL MSG_WAITALL #else 0 #endif + | #ifdef SKALIBS_HASCMSGCLOEXEC - | MSG_CMSG_CLOEXEC + MSG_CMSG_CLOEXEC +#else + 0 #endif ; diff --git a/src/libunixonacid/unixmessage_sender_flush.c b/src/libunixonacid/unixmessage_sender_flush.c index 5c5ad2b..a115c58 100644 --- a/src/libunixonacid/unixmessage_sender_flush.c +++ b/src/libunixonacid/unixmessage_sender_flush.c @@ -1,6 +1,9 @@ /* ISC license. */ +#ifndef _XPG4_2 #define _XPG4_2 +#endif + #include #include #include diff --git a/src/sysdeps/tryancilautoclose.c b/src/sysdeps/tryancilautoclose.c index 53b768d..d0a2833 100644 --- a/src/sysdeps/tryancilautoclose.c +++ b/src/sysdeps/tryancilautoclose.c @@ -21,16 +21,9 @@ # include #endif -typedef struct ancilbuf_s ancilbuf_t, *ancilbuf_t_ref ; -struct ancilbuf_s -{ - struct cmsghdr h ; - int fd ; -} ; - static int ancil_send_fd (int sock, int fd) { - ancilbuf_t buf ; + char ancilbuf[CMSG_SPACE(sizeof(int))] ; char s[8] = "blahblah" ; struct iovec v = { .iov_base = s, .iov_len = 8 } ; struct msghdr msghdr = @@ -40,8 +33,8 @@ static int ancil_send_fd (int sock, int fd) .msg_iov = &v, .msg_iovlen = 1, .msg_flags = 0, - .msg_control = &buf, - .msg_controllen = sizeof(ancilbuf_t) + .msg_control = ancilbuf, + .msg_controllen = sizeof(ancilbuf) } ; struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msghdr) ; cmsg->cmsg_len = msghdr.msg_controllen ; @@ -54,7 +47,7 @@ static int ancil_send_fd (int sock, int fd) static int ancil_recv_fd (int sock) { - ancilbuf_t buf ; + char ancilbuf[CMSG_SPACE(sizeof(int))] ; char s[8] ; struct iovec v = { .iov_base = s, .iov_len = 8 } ; struct msghdr msghdr = @@ -64,8 +57,8 @@ static int ancil_recv_fd (int sock) .msg_iov = &v, .msg_iovlen = 1, .msg_flags = 0, - .msg_control = &buf, - .msg_controllen = sizeof(ancilbuf_t) + .msg_control = ancilbuf, + .msg_controllen = sizeof(ancilbuf) } ; struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msghdr) ; cmsg->cmsg_len = msghdr.msg_controllen ; -- cgit v1.2.3