skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

commit 31009f586a04251df0fb5853017ecfcaf70b307f
parent 4557dacfbe04206c57e459b734016d2b6edfe7f3
Author: Laurent Bercot <ska-skaware@skarnet.org>
Date:   Sun, 21 Dec 2014 01:43:39 +0000

 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.

Diffstat:
Msrc/libunixonacid/unixmessage_receive.c | 13++++++++++---
Msrc/libunixonacid/unixmessage_sender_flush.c | 3+++
Msrc/sysdeps/tryancilautoclose.c | 19++++++-------------
3 files changed, 19 insertions(+), 16 deletions(-)

diff --git 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 @@ -1,6 +1,9 @@ /* ISC license. */ +#ifndef _XPG4_2 #define _XPG4_2 +#endif + #include <skalibs/sysdeps.h> #include <skalibs/nonposix.h> #include <sys/socket.h> diff --git a/src/sysdeps/tryancilautoclose.c b/src/sysdeps/tryancilautoclose.c @@ -21,16 +21,9 @@ # include <sys/param.h> #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 ;