记一次传递文件句柄引发的血案 (续)
继 记一次传递文件句柄引发的血案 之后,这个 demo 又引发了一次血案,现录如下。 这次我是在 linux 上测试文件句柄的传递,linux 上并没有 STREAMS 系统, 因此是采用 unix domain socket 的 sendmsg/recvmsg 中控制消息部分来传递句柄的。 代码的主要修改部分集中于发送 fd 与接收 fd 处,一开始代码是这样的,运行良好。 spipe_fd.c 1 #define MAXLINE 128 2 #define RIGHTSLEN CMSG_LEN(sizeof(int)) 3 #define CREDSLEN CMSG_LEN(sizeof(struct CREDSTRUCT)) 4 #define CONTROLLEN (RIGHTSLEN+CREDSLEN) 5 6 int send_fd (int fd, int fd_to_send) 7 { 8 struct iovec iov[1]; 9 struct msghdr msg; 10 struct cmsghdr *cmptr = NULL; 11 char buf[2]; 12 13 iov[0].iov_base = buf; 14 iov[0].iov_len = 2; 15 16 msg.msg_iov = iov; 17 msg.msg_iovlen = 1;