48 char control[CMSG_SPACE(
sizeof(
int))] = {};
52 msg.msg_name =
const_cast<sockaddr*>(&destAddress.getSockAddr());
53 msg.msg_namelen = destAddress.getSockAddrLen();
55 msg.msg_control = control_un.control;
56 msg.msg_controllen =
sizeof(control_un.control);
63 msg.msg_iov[0].iov_base = &ptr;
64 msg.msg_iov[0].iov_len = 1;
66 cmsghdr* cmptr = CMSG_FIRSTHDR(&msg);
67 cmptr->cmsg_level = SOL_SOCKET;
68 cmptr->cmsg_type = SCM_RIGHTS;
69 *
reinterpret_cast<
int*>(CMSG_DATA(cmptr)) = sendfd;
70 cmptr->cmsg_len = CMSG_LEN(
sizeof(
int));
72 return sendmsg(core::Descriptor::getFd(), &msg, 0);
78 char control[CMSG_SPACE(
sizeof(
int))] = {};
82 msg.msg_control = control_un.control;
83 msg.msg_controllen =
sizeof(control_un.control);
85 msg.msg_name =
nullptr;
93 msg.msg_iov[0].iov_base = &ptr;
94 msg.msg_iov[0].iov_len = 1;
98 if ((n = recvmsg(core::Descriptor::getFd(), &msg, 0)) > 0) {
99 cmsghdr* cmptr =
nullptr;
101 if ((cmptr = CMSG_FIRSTHDR(&msg)) !=
nullptr && cmptr->cmsg_len == CMSG_LEN(
sizeof(
int))) {
102 if (cmptr->cmsg_level != SOL_SOCKET || cmptr->cmsg_type != SCM_RIGHTS) {
107 *recvfd = *
reinterpret_cast<
int*>(CMSG_DATA(cmptr));