diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-04-25 05:45:29 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 1997-04-25 05:45:29 +0000 |
commit | 2a86d1d9de55aa52d35724af2e5a36ebe4572c0b (patch) | |
tree | 0a2fc5331b33587b143a712dc9f5d75553c3a2d1 /ace/LSOCK_Stream.cpp | |
parent | 043a67bf38b04a8b8df4b160d6e80d4fdca778c8 (diff) | |
download | ATCD-2a86d1d9de55aa52d35724af2e5a36ebe4572c0b.tar.gz |
*** empty log message ***
Diffstat (limited to 'ace/LSOCK_Stream.cpp')
-rw-r--r-- | ace/LSOCK_Stream.cpp | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/ace/LSOCK_Stream.cpp b/ace/LSOCK_Stream.cpp index eb6db5d0b26..292c6a5090c 100644 --- a/ace/LSOCK_Stream.cpp +++ b/ace/LSOCK_Stream.cpp @@ -34,20 +34,35 @@ ACE_LSOCK_Stream::dump (void) const ssize_t ACE_LSOCK_Stream::send_msg (const iovec iov[], size_t n, - int fd) + ACE_HANDLE handle) { ACE_TRACE ("ACE_LSOCK_Stream::send_msg"); msghdr send_msg; +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + char cmsgbuf[ACE_BSD_CONTROL_MSG_LEN]; + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ send_msg.msg_iov = (iovec *) iov; send_msg.msg_iovlen = n; send_msg.msg_name = 0; send_msg.msg_namelen = 0; - send_msg.msg_accrights = (char *) &fd; - send_msg.msg_accrightslen = sizeof fd; + +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + cmsgptr->cmsg_level = SOL_SOCKET; + cmsgptr->cmsg_type = SCM_RIGHTS; + cmsgptr->cmsg_len = sizeof cmsgbuf; + send_msg.msg_control = cmsgbuf; + send_msg.msg_controllen = sizeof cmsgbuf; + *(ACE_HANDLE *) CMSG_DATA (cmsgptr) = handle; + send_msg.msg_flags = 0 ; +#else + send_msg.msg_accrights = (char *) &handle; + send_msg.msg_accrightslen = sizeof handle; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ return ACE_OS::sendmsg (this->ACE_SOCK_Stream::get_handle (), - &send_msg, 0); + &send_msg, 0); } // Read a readv-style vector of buffers, along with an open I/O @@ -56,20 +71,34 @@ ACE_LSOCK_Stream::send_msg (const iovec iov[], ssize_t ACE_LSOCK_Stream::recv_msg (iovec iov[], size_t n, - int &fd) + ACE_HANDLE &handle) { ACE_TRACE ("ACE_LSOCK_Stream::recv_msg"); msghdr recv_msg; +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + char cmsgbuf[ACE_BSD_CONTROL_MSG_LEN]; + cmsghdr *cmsgptr = (cmsghdr *) cmsgbuf; +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ recv_msg.msg_iov = (iovec *) iov; recv_msg.msg_iovlen = n; recv_msg.msg_name = 0; recv_msg.msg_namelen = 0; - recv_msg.msg_accrights = (char *) &fd; - recv_msg.msg_accrightslen = sizeof fd; + +#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) + recv_msg.msg_control = cmsgbuf; + recv_msg.msg_controllen = sizeof cmsgbuf; + ssize_t result = ACE_OS::recvmsg (this->ACE_SOCK_Stream::get_handle (), + &recv_msg, 0); + handle = *(ACE_HANDLE*) CMSG_DATA (cmsgptr) ; + return result; +#else + recv_msg.msg_accrights = (char *) &handle; + recv_msg.msg_accrightslen = sizeof handle; return ACE_OS::recvmsg (this->ACE_SOCK_Stream::get_handle (), - &recv_msg, 0); + &recv_msg, 0); +#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */ } #endif /* ACE_HAS_MSG */ #endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */ |