Advertisement
Guest User

Untitled

a guest
Nov 25th, 2010
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <sys/socket.h>
  2. #include <sys/un.h>
  3.  
  4. static int send_fd (int unix_fd, int fd)
  5. {
  6.   struct msghdr msgh;
  7.   struct cmsghdr *cmsg;
  8.   char buf[CMSG_SPACE (sizeof (fd))];
  9.   memset (&msgh, 0, sizeof (msgh));
  10.   memset (buf, 0, sizeof (buf));
  11.  
  12.   msgh.msg_control = buf;
  13.   msgh.msg_controllen = sizeof (buf);
  14.  
  15.   cmsg = CMSG_FIRSTHDR (&msgh);
  16.   cmsg->cmsg_len = CMSG_LEN (sizeof (fd));
  17.   cmsg->cmsg_level = SOL_SOCKET;
  18.   cmsg->cmsg_type = SCM_RIGHTS;
  19.  
  20.   msgh.msg_controllen = cmsg->cmsg_len;
  21.  
  22.   memcpy (CMSG_DATA (cmsg), &fd, sizeof (fd));
  23.   return sendmsg (unix_fd, &msgh, 0);
  24. }
  25.  
  26. int main ()
  27. {
  28.   int fd[2], ff[2];
  29.   int target;
  30.   if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, fd)==-1)
  31.     return 1;
  32.   for (;;)
  33.   {
  34.     if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, ff)==-1)
  35.     return 2;
  36.     send_fd (ff[0], fd[0]);
  37.     send_fd (ff[0], fd[1]);
  38.     close (fd[1]);
  39.     close (fd[0]);
  40.     fd[0] = ff[0];
  41.     fd[1] = ff[1];
  42.   }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement