| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /* include write_fd */
- #include "unp.h"
- ssize_t
- write_fd(int fd, void *ptr, size_t nbytes, int sendfd)
- {
- struct msghdr msg;
- struct iovec iov[1];
- #ifdef HAVE_MSGHDR_MSG_CONTROL
- union {
- struct cmsghdr cm;
- char control[CMSG_SPACE(sizeof(int))];
- } control_un;
- struct cmsghdr *cmptr;
- msg.msg_control = control_un.control;
- msg.msg_controllen = sizeof(control_un.control);
- cmptr = CMSG_FIRSTHDR(&msg);
- cmptr->cmsg_len = CMSG_LEN(sizeof(int));
- cmptr->cmsg_level = SOL_SOCKET;
- cmptr->cmsg_type = SCM_RIGHTS;
- *((int *) CMSG_DATA(cmptr)) = sendfd;
- #else
- msg.msg_accrights = (caddr_t) &sendfd;
- msg.msg_accrightslen = sizeof(int);
- #endif
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- iov[0].iov_base = ptr;
- iov[0].iov_len = nbytes;
- msg.msg_iov = iov;
- msg.msg_iovlen = 1;
- return(sendmsg(fd, &msg, 0));
- }
- /* end write_fd */
- ssize_t
- Write_fd(int fd, void *ptr, size_t nbytes, int sendfd)
- {
- ssize_t n;
- if ( (n = write_fd(fd, ptr, nbytes, sendfd)) < 0)
- err_sys("write_fd error");
- return(n);
- }
|