22 #if (NGX_HAVE_MSGHDR_MSG_CONTROL)
30 msg.msg_control = NULL;
31 msg.msg_controllen = 0;
34 msg.msg_control = (caddr_t) &cmsg;
35 msg.msg_controllen =
sizeof(cmsg);
37 cmsg.cm.cmsg_len =
CMSG_LEN(
sizeof(
int));
38 cmsg.cm.cmsg_level = SOL_SOCKET;
39 cmsg.cm.cmsg_type = SCM_RIGHTS;
59 msg.msg_accrights = NULL;
60 msg.msg_accrightslen = 0;
63 msg.msg_accrights = (caddr_t) &ch->
fd;
64 msg.msg_accrightslen =
sizeof(
int);
69 iov[0].iov_base = (
char *) ch;
70 iov[0].iov_len = size;
77 n = sendmsg(s, &msg, 0);
101 #if (NGX_HAVE_MSGHDR_MSG_CONTROL)
110 iov[0].iov_base = (
char *) ch;
111 iov[0].iov_len = size;
118 #if (NGX_HAVE_MSGHDR_MSG_CONTROL)
119 msg.msg_control = (caddr_t) &cmsg;
120 msg.msg_controllen =
sizeof(cmsg);
122 msg.msg_accrights = (caddr_t) &fd;
123 msg.msg_accrightslen =
sizeof(int);
126 n = recvmsg(s, &msg, 0);
145 "recvmsg() returned not enough data: %uz", n);
149 #if (NGX_HAVE_MSGHDR_MSG_CONTROL)
153 if (cmsg.cm.cmsg_len < (socklen_t)
CMSG_LEN(
sizeof(
int))) {
155 "recvmsg() returned too small ancillary data");
159 if (cmsg.cm.cmsg_level != SOL_SOCKET || cmsg.cm.cmsg_type != SCM_RIGHTS)
162 "recvmsg() returned invalid ancillary data "
163 "level %d or type %d",
164 cmsg.cm.cmsg_level, cmsg.cm.cmsg_type);
173 if (msg.msg_flags & (MSG_TRUNC|MSG_CTRUNC)) {
175 "recvmsg() truncated data");
181 if (msg.msg_accrightslen !=
sizeof(
int)) {
183 "recvmsg() returned no ancillary data");
218 rev->lock = &c->lock;
219 wev->lock = &c->lock;
220 rev->own_lock = &c->lock;
221 wev->own_lock = &c->lock;
251 if (close(fd[0]) == -1) {
255 if (close(fd[1]) == -1) {