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:
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 ;