2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "net/un/dgram/Socket.h"
44#include "net/phy/dgram/PeerSocket.hpp"
45#include "net/un/phy/PhysicalSocket.hpp"
47#ifndef DOXYGEN_SHOULD_SKIP_THIS
57 : Super
(SOCK_DGRAM
, 0
) {
70 char control[CMSG_SPACE(
sizeof(
int))] = {};
77 msg.msg_control = control_un.control;
78 msg.msg_controllen =
sizeof(control_un.control);
85 msg.msg_iov[0].iov_base = &ptr;
86 msg.msg_iov[0].iov_len = 1;
88 cmsghdr* cmptr = CMSG_FIRSTHDR(&msg);
89 cmptr->cmsg_level = SOL_SOCKET;
90 cmptr->cmsg_type = SCM_RIGHTS;
91 *
reinterpret_cast<
int*>(CMSG_DATA(cmptr)) = sendfd;
92 cmptr->cmsg_len = CMSG_LEN(
sizeof(
int));
100 char control[CMSG_SPACE(
sizeof(
int))] = {};
104 msg.msg_control = control_un.control;
105 msg.msg_controllen =
sizeof(control_un.control);
107 msg.msg_name =
nullptr;
115 msg.msg_iov[0].iov_base = &ptr;
116 msg.msg_iov[0].iov_len = 1;
121 cmsghdr* cmptr =
nullptr;
123 if ((cmptr = CMSG_FIRSTHDR(&msg)) !=
nullptr && cmptr->cmsg_len == CMSG_LEN(
sizeof(
int))) {
124 if (cmptr->cmsg_level != SOL_SOCKET || cmptr->cmsg_type != SCM_RIGHTS) {
129 *recvfd = *
reinterpret_cast<
int*>(CMSG_DATA(cmptr));
const SockLen & getSockAddrLen() const
const sockaddr & getSockAddr()
ssize_t recvFd(int *recvfd)
ssize_t sendFd(SocketAddress &&destAddress, int sendfd)
ssize_t sendFd(SocketAddress &destAddress, int sendfd)
PhysicalSocket(int type, int protocol)