From 7530e8cdd506ecec1f4ad3bbd55f94de5a6d63ac Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 26 Oct 2020 14:21:53 +0000 Subject: Separate and expose ancil_recv_fd/ancil_send_fd The goal is to make late channel creation easy, as opposed to textclient which always creates a new channel at start time. This commit also moves posixishard.h inclusions as late as possible. --- .../textclient_server_init_fromsocket.c | 41 +++------------------- 1 file changed, 4 insertions(+), 37 deletions(-) (limited to 'src/libunixonacid/textclient_server_init_fromsocket.c') diff --git a/src/libunixonacid/textclient_server_init_fromsocket.c b/src/libunixonacid/textclient_server_init_fromsocket.c index b7f4e84..4964524 100644 --- a/src/libunixonacid/textclient_server_init_fromsocket.c +++ b/src/libunixonacid/textclient_server_init_fromsocket.c @@ -1,25 +1,15 @@ /* ISC license. */ -#include - -#include #include #include -#include +#include -#include -#include -#include #include #include +#include #include #include - -union aligner_u -{ - struct cmsghdr cmsghdr ; - int i ; -} ; +#include static int getfd (void *p) { @@ -35,30 +25,7 @@ static int one (void *p) static int sendit (void *p) { int *fd = p ; - union aligner_u ancilbuf[1 + (CMSG_SPACE(sizeof(int)) - 1) / sizeof(union aligner_u)] ; - ssize_t r ; - char ch = '|' ; - struct iovec v = { .iov_base = &ch, .iov_len = 1 } ; - struct msghdr hdr = - { - .msg_name = 0, - .msg_namelen = 0, - .msg_iov = &v, - .msg_iovlen = 1, - .msg_control = ancilbuf, - .msg_controllen = CMSG_SPACE(sizeof(int)) - } ; - struct cmsghdr *c = CMSG_FIRSTHDR(&hdr) ; - memset(hdr.msg_control, 0, hdr.msg_controllen) ; - c->cmsg_level = SOL_SOCKET ; - c->cmsg_type = SCM_RIGHTS ; - c->cmsg_len = CMSG_LEN(sizeof(int)) ; - *(int *)CMSG_DATA(c) = fd[1] ; - do r = sendmsg(fd[0], &hdr, MSG_NOSIGNAL) ; - while (r < 0 && errno == EINTR) ; - if (r <= 0) return 0 ; - fd_close(fd[1]) ; - return 1 ; + return ancil_send_fd(fd[0], fd[1], '|') ; } int textclient_server_init_fromsocket (textmessage_receiver_t *in, textmessage_sender_t *syncout, textmessage_sender_t *asyncout, char const *before, size_t beforelen, char const *after, size_t afterlen, tain_t const *deadline, tain_t *stamp) -- cgit v1.2.3