|
Lines 312-327
extern char *poll_revents_to_str(const short revents)
Link Here
|
| 312 |
return txt; |
312 |
return txt; |
| 313 |
} |
313 |
} |
| 314 |
|
314 |
|
| 315 |
/* pass an open file descriptor back to the parent process */ |
315 |
/* pass an open file descriptor back to the requesting process */ |
| 316 |
extern void send_fd_over_pipe(int socket, int fd) |
316 |
extern void send_fd_over_pipe(int socket, int fd) |
| 317 |
{ |
317 |
{ |
| 318 |
struct msghdr msg = { 0 }; |
318 |
struct msghdr msg = { 0 }; |
| 319 |
struct cmsghdr *cmsg; |
319 |
struct cmsghdr *cmsg; |
| 320 |
char buf[CMSG_SPACE(sizeof(fd))]; |
320 |
char buf[CMSG_SPACE(sizeof(fd))], c; |
|
|
321 |
struct iovec iov[1]; |
| 321 |
memset(buf, '\0', sizeof(buf)); |
322 |
memset(buf, '\0', sizeof(buf)); |
| 322 |
|
323 |
|
| 323 |
msg.msg_iov = NULL; |
324 |
iov[0].iov_base = &c; |
| 324 |
msg.msg_iovlen = 0; |
325 |
iov[0].iov_len = sizeof(c); |
|
|
326 |
msg.msg_iov = iov; |
| 327 |
msg.msg_iovlen = sizeof(c); |
| 325 |
msg.msg_control = buf; |
328 |
msg.msg_control = buf; |
| 326 |
msg.msg_controllen = sizeof(buf); |
329 |
msg.msg_controllen = sizeof(buf); |
| 327 |
|
330 |
|
|
Lines 337-351
extern void send_fd_over_pipe(int socket, int fd)
Link Here
|
| 337 |
error("%s: failed to send fd: %m", __func__); |
340 |
error("%s: failed to send fd: %m", __func__); |
| 338 |
} |
341 |
} |
| 339 |
|
342 |
|
| 340 |
/* receive an open file descriptor from fork()'d child over unix socket */ |
343 |
/* receive an open file descriptor over unix socket */ |
| 341 |
extern int receive_fd_over_pipe(int socket) |
344 |
extern int receive_fd_over_pipe(int socket) |
| 342 |
{ |
345 |
{ |
| 343 |
struct msghdr msg = {0}; |
346 |
struct msghdr msg = {0}; |
| 344 |
struct cmsghdr *cmsg; |
347 |
struct cmsghdr *cmsg; |
| 345 |
int fd; |
348 |
int fd; |
| 346 |
msg.msg_iov = NULL; |
349 |
struct iovec iov[1]; |
| 347 |
msg.msg_iovlen = 0; |
350 |
char c_buffer[256], c; |
| 348 |
char c_buffer[256]; |
351 |
|
|
|
352 |
iov[0].iov_base = &c; |
| 353 |
iov[0].iov_len = sizeof(c); |
| 354 |
msg.msg_iov = iov; |
| 355 |
msg.msg_iovlen = sizeof(iov)/sizeof(iov[0]); |
| 349 |
msg.msg_control = c_buffer; |
356 |
msg.msg_control = c_buffer; |
| 350 |
msg.msg_controllen = sizeof(c_buffer); |
357 |
msg.msg_controllen = sizeof(c_buffer); |
| 351 |
|
358 |
|