7 #include <sys/socket.h>
16 .iov_len = sizeof(iov)
19 while ((fd = open("/dev/null", O_RDWR)) < 3)
24 assert(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == 0);
26 assert(setsockopt(sv[0], SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)) == 0);
32 assert(close(sv[0]) == 0);
33 assert(dup2(sv[1], 1) == 1);
34 assert(close(sv[1]) == 0);
37 assert((fds[0] = open("/dev/null", O_RDWR)) == 3);
38 assert((fds[1] = open("/dev/zero", O_RDONLY)) == 4);
42 char buf[CMSG_LEN(sizeof(fds))];
45 .cmsg_level = SOL_SOCKET,
46 .cmsg_type = SCM_RIGHTS,
47 .cmsg_len = CMSG_LEN(sizeof(fds))
51 memcpy(CMSG_DATA(&control.cmsg), fds, sizeof(fds));
56 .msg_control = &control,
57 .msg_controllen = sizeof(control)
60 assert(sendmsg(1, &mh, 0) == sizeof(iov));
61 assert(close(1) == 0);
64 assert(waitpid(pid, &status, 0) == pid);
67 assert(close(sv[1]) == 0);
68 assert(dup2(sv[0], 0) == 0);
69 assert(close(sv[0]) == 0);
71 struct cmsghdr control[4];
76 .msg_control = control,
77 .msg_controllen = sizeof(control)
80 assert(recvmsg(0, &mh, 0) == sizeof(iov));
81 assert(close(0) == 0);