version 1.4, 2002/06/26 14:50:04 |
version 1.4.6.1, 2004/08/19 22:37:31 |
|
|
#include "monitor_fdpass.h" |
#include "monitor_fdpass.h" |
|
|
void |
void |
mm_send_fd(int socket, int fd) |
mm_send_fd(int sock, int fd) |
{ |
{ |
struct msghdr msg; |
struct msghdr msg; |
char tmp[CMSG_SPACE(sizeof(int))]; |
char tmp[CMSG_SPACE(sizeof(int))]; |
|
|
msg.msg_iov = &vec; |
msg.msg_iov = &vec; |
msg.msg_iovlen = 1; |
msg.msg_iovlen = 1; |
|
|
if ((n = sendmsg(socket, &msg, 0)) == -1) |
if ((n = sendmsg(sock, &msg, 0)) == -1) |
fatal("%s: sendmsg(%d): %s", __func__, fd, |
fatal("%s: sendmsg(%d): %s", __func__, fd, |
strerror(errno)); |
strerror(errno)); |
if (n != 1) |
if (n != 1) |
|
|
} |
} |
|
|
int |
int |
mm_receive_fd(int socket) |
mm_receive_fd(int sock) |
{ |
{ |
struct msghdr msg; |
struct msghdr msg; |
char tmp[CMSG_SPACE(sizeof(int))]; |
char tmp[CMSG_SPACE(sizeof(int))]; |
|
|
msg.msg_control = tmp; |
msg.msg_control = tmp; |
msg.msg_controllen = sizeof(tmp); |
msg.msg_controllen = sizeof(tmp); |
|
|
if ((n = recvmsg(socket, &msg, 0)) == -1) |
if ((n = recvmsg(sock, &msg, 0)) == -1) |
fatal("%s: recvmsg: %s", __func__, strerror(errno)); |
fatal("%s: recvmsg: %s", __func__, strerror(errno)); |
if (n != 1) |
if (n != 1) |
fatal("%s: recvmsg: expected received 1 got %ld", |
fatal("%s: recvmsg: expected received 1 got %ld", |
__func__, (long)n); |
__func__, (long)n); |
|
|
cmsg = CMSG_FIRSTHDR(&msg); |
cmsg = CMSG_FIRSTHDR(&msg); |
|
if (cmsg == NULL) |
|
fatal("%s: no message header", __func__); |
if (cmsg->cmsg_type != SCM_RIGHTS) |
if (cmsg->cmsg_type != SCM_RIGHTS) |
fatal("%s: expected type %d got %d", __func__, |
fatal("%s: expected type %d got %d", __func__, |
SCM_RIGHTS, cmsg->cmsg_type); |
SCM_RIGHTS, cmsg->cmsg_type); |