From owner-svn-soc-all@FreeBSD.ORG Wed Jul 10 15:13:13 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 56D10A0C for ; Wed, 10 Jul 2013 15:13:13 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) by mx1.freebsd.org (Postfix) with ESMTP id 495651604 for ; Wed, 10 Jul 2013 15:13:13 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6AFDDeK041653 for ; Wed, 10 Jul 2013 15:13:13 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r6AFDDfO041649 for svn-soc-all@FreeBSD.org; Wed, 10 Jul 2013 15:13:13 GMT (envelope-from dpl@FreeBSD.org) Date: Wed, 10 Jul 2013 15:13:13 GMT Message-Id: <201307101513.r6AFDDfO041649@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r254563 - soc2013/dpl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Jul 2013 15:13:13 -0000 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