linux网络编程之socket(十六)
副标题[/!--empirenews.page--] 通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数 在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符。 下面先来看两个函数: #include <sys/types.h> #include <sys/socket.h> ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags); ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); 它们与sendto 和 recvfrom 函数相似,只不过可以传输 更复杂的数据结构,不仅可以传输一般数据,还可以传输额外的数据,即文件描述符。下面来看结构体msghdr : struct msghdr { void *msg_name; /* optional address */ socklen_t msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ size_t msg_iovlen; /* # elements in msg_iov */ void *msg_control; /* ancillary data, see below */ size_t msg_controllen; /* ancillary data buffer len */ int msg_flags; /* flags on received message */ }; 如下图所示: 1、msg_name : 即对等方的地址指针,不关心时设为NULL即可; 2、msg_namelen:地址长度,不关心时设置为0即可; 3、 msg_iov:是结构体iovec 的指针。 struct iovec { void *iov_base; /* Starting address */ size_t iov_len; /* Number of bytes to transfer */ }; 成员iov_base 可以认为是传输正常数据时的buf,iov_len 是buf 的大小。 4、msg_iovlen:当有n个 iovec 结构体时,此值为n; (编辑:温州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |