socsvn commit: r254563 - soc2013/dpl
dpl at FreeBSD.org
dpl at FreeBSD.org
Wed Jul 10 15:13:13 UTC 2013
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
More information about the svn-soc-all
mailing list