socsvn commit: r253795 - soc2013/dpl/head/contrib/bzip2
dpl at FreeBSD.org
dpl at FreeBSD.org
Mon Jul 1 16:22:46 UTC 2013
Author: dpl
Date: Mon Jul 1 16:22:45 2013
New Revision: 253795
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253795
Log:
Changed sendfd to use malloc(). Still not working tough.
Modified:
soc2013/dpl/head/contrib/bzip2/bzip2.c
Modified: soc2013/dpl/head/contrib/bzip2/bzip2.c
==============================================================================
--- soc2013/dpl/head/contrib/bzip2/bzip2.c Mon Jul 1 15:12:05 2013 (r253794)
+++ soc2013/dpl/head/contrib/bzip2/bzip2.c Mon Jul 1 16:22:45 2013 (r253795)
@@ -228,11 +228,13 @@
int sendfd(int, int);
int recvfd(int);
+#define DATALEN CMSG_LEN(sizeof(int))
+
int
sendfd(int s, int fd)
{
struct msghdr msg;
- struct cmsghdr cmsg;
+ struct cmsghdr *cmsg;
struct iovec io[1];
char buf = { "!" };
int ret;
@@ -240,22 +242,25 @@
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 = CMSG_LEN(sizeof(int));
+ msg.msg_control =cmsg;
+ msg.msg_controllen = DATALEN;
- cmsg.cmsg_len = msg.msg_controllen;
- cmsg.cmsg_level = SOL_SOCKET;
- cmsg.cmsg_type = SCM_RIGHTS;
- *(int *)CMSG_DATA(&cmsg) = fd;
- printf("sendmsg(%d, %p, 0)\n",s, &msg);
+ 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){
- printf("sendmsg() returned: %d\n", ret);
+ printf("sendmsg() returned: %d (%s)\n", ret, strerror(errno));
return -1;
}
+ free(cmsg);
return 0;
}
@@ -276,9 +281,9 @@
msg.msg_iov = io;
msg.msg_iovlen = 1;
msg.msg_control = &cmsg;
- msg.msg_controllen = CMSG_LEN(sizeof(int));
+ msg.msg_controllen = DATALEN;
- cmsg.cmsg_len = msg.msg_controllen;
+ cmsg.cmsg_len = DATALEN;
cmsg.cmsg_level = SOL_SOCKET;
cmsg.cmsg_type = SCM_RIGHTS;
/*Why does sendmsg set errno to 9 EBADF??*/
More information about the svn-soc-all
mailing list