MCPcopy Create free account
hub / github.com/apache/httpd / send_socket

Function send_socket

modules/proxy/mod_proxy_fdpass.c:74–121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72}
73
74static apr_status_t send_socket(apr_pool_t *p,
75 apr_socket_t *s,
76 apr_socket_t *outbound)
77{
78 apr_status_t rv;
79 apr_os_sock_t rawsock;
80 apr_os_sock_t srawsock;
81 struct msghdr msg;
82 struct cmsghdr *cmsg;
83 struct iovec iov;
84 char b = '\0';
85
86 rv = apr_os_sock_get(&rawsock, outbound);
87 if (rv != APR_SUCCESS) {
88 return rv;
89 }
90
91 rv = apr_os_sock_get(&srawsock, s);
92 if (rv != APR_SUCCESS) {
93 return rv;
94 }
95
96 memset(&msg, 0, sizeof(msg));
97
98 msg.msg_iov = &iov;
99 msg.msg_iovlen = 1;
100
101 iov.iov_base = &b;
102 iov.iov_len = 1;
103
104 cmsg = apr_palloc(p, sizeof(*cmsg) + sizeof(rawsock));
105 cmsg->cmsg_len = sizeof(*cmsg) + sizeof(rawsock);
106 cmsg->cmsg_level = SOL_SOCKET;
107 cmsg->cmsg_type = SCM_RIGHTS;
108
109 memcpy(CMSG_DATA(cmsg), &rawsock, sizeof(rawsock));
110
111 msg.msg_control = cmsg;
112 msg.msg_controllen = cmsg->cmsg_len;
113
114 rv = sendmsg(srawsock, &msg, 0);
115
116 if (rv == -1) {
117 return errno;
118 }
119
120 return APR_SUCCESS;
121}
122
123static int proxy_fdpass_handler(request_rec *r, proxy_worker *worker,
124 proxy_server_conf *conf,

Callers 1

proxy_fdpass_handlerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected