|
帮助说返回值是发送的字节数,但是这个函数到底发送出去什么了呢,好像不是整个msghdr结构啊,比如下面这段代码:
- #include <sys/socket.h>
- #include <stdlib.h>
- #define CONTROLLEN CMSG_LEN(sizeof(int))
- static struct cmsghdr *cmptr = NULL;
- int
- send_fd(int fd, int fd_to_send)
- {
- struct iovec iov[1];
- struct msghdr msg;
- char buf[2];
-
- iov[0].iov_base = buf;
- iov[0].iov_len = 2;
- msg.msg_iov = iov;
- msg.msg_iovlen = 1;
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- if (fd_to_send < 0) {
- msg.msg_control = NULL;
- msg.msg_controllen = 0;
- buf[1] = -fd_to_send;
- if (buf[1] == 0)
- buf[1] = 1;
- } else {
- if (cmptr == NULL && (cmptr = malloc(CONTROLLEN)) == NULL)
- return(-1);
- cmptr->cmsg_level = SOL_SOCKET;
- cmptr->cmsg_type = SCM_RIGHTS;
- cmptr->cmsg_len = CONTROLLEN;
- msg.msg_control = cmptr;
- msg.msg_controllen = CONTROLLEN;
- *(int *)CMSG_DATA(cmptr) = fd_to_send;
- buf[1] = 0;
- }
- buf[0] = 0;
- [color="Red"]if (sendmsg(fd, &msg, 0) != 2)[/color]
- return(-1);
- return(0);
- }
复制代码
这里它为什么取2呢,难道返回值是buf数组的大小?但是我觉得至少也应该包括CMSG_DATA宏指向的数据啊,不解,请指教,谢谢 |
|