Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jul 2013 15:13:13 GMT
From:      dpl@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r254563 - soc2013/dpl
Message-ID:  <201307101513.r6AFDDfO041649@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dpl
Date: Wed Jul 10 15:13:13 2013
New Revision: 254563
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254563

Log:
  Adding function passing functions.
  

Modified:
  soc2013/dpl/functions.c

Modified: soc2013/dpl/functions.c
==============================================================================
--- soc2013/dpl/functions.c	Wed Jul 10 14:16:39 2013	(r254562)
+++ soc2013/dpl/functions.c	Wed Jul 10 15:13:13 2013	(r254563)
@@ -43,4 +43,67 @@
 		exit(E_ERROR);
 	}
 	return;
+}
+
+#define DATALEN CMSG_LEN(sizeof(int))
+
+int
+sendfd(int s, int fd)
+{   
+   printf("sendfd sending: %d\n", fd);
+   struct msghdr msg;   
+   struct cmsghdr *cmsg;
+   struct iovec io[1];
+   char buf[1] = { "!" };
+   int ret;
+
+   io[0].iov_base = buf;
+   io[0].iov_len = 1;
+
+   if( (cmsg = malloc(DATALEN)) == NULL )
+      return -1;
+
+   msg.msg_name = NULL;
+   msg.msg_namelen = 0;
+   msg.msg_iov = io;
+   msg.msg_iovlen = 1;
+   msg.msg_control =cmsg;
+   msg.msg_controllen = DATALEN;
+
+   cmsg->cmsg_len = DATALEN;
+   cmsg->cmsg_level = SOL_SOCKET;
+   cmsg->cmsg_type = SCM_RIGHTS;
+   *(int *)CMSG_DATA(cmsg) = fd;
+   if( (ret = sendmsg(s, &msg, 0)) <= 0)
+      return -1;
+   free(cmsg);
+   return 0;
+}
+
+int
+recvfd(int s)
+{
+   int fd;
+   struct msghdr msg;   
+   struct cmsghdr cmsg;
+   char buf[1] = { "!" };
+   struct iovec io[1];
+
+   io[0].iov_base = buf;
+   io[0].iov_len = 1;
+
+   msg.msg_name = NULL;
+   msg.msg_namelen = 0;
+   msg.msg_iov = io;
+   msg.msg_iovlen = 1;
+   msg.msg_control = &cmsg;
+   msg.msg_controllen = DATALEN;
+
+   cmsg.cmsg_len = DATALEN;
+   cmsg.cmsg_level = SOL_SOCKET;
+   cmsg.cmsg_type = SCM_RIGHTS;
+   if(recvmsg(s, &msg, 0) < 0)
+      return -1;
+   fd = *(int *)CMSG_DATA(&cmsg);
+   return 0;
 }
\ No newline at end of file



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307101513.r6AFDDfO041649>