这是一篇好的文章,给与我的工作很大的帮助。
从4.3BSDReno开始,更改了msghdr结构的定义。在以前版本中被称之为存取权的最后两个元素改称为辅助数据。另外,在该结构结束处增加了一个新成员msg_flags。
strcut msghdr {
caddr_t msg_name; 可选的地址
int msg_namelen; 地址长度
struct iovec msg_iov; 散布/聚集数组
int msg_iovlen; 在msg_iov数组中的元素数
caddr_t msg_control; 辅助数据
int msg-controllen; 辅助数据的长度
int msg_flags; 接收到消息的标志
}
现在,msg_control字段指向一个cmsghdr(控制消息头)结构。
struct cmsghdr {
u_int cmsg_len; 数据的字节数,包括头
int cmsg_level; 初始的协议
int cmsg_type; 协议细节的类型下接真正的控制消息数据
}
为了发送一文件描述符,将cmsg_len设置为cmsghdr结构长度加一个整型(描述符 )的长度。将cmsg_level设置为SOL_SOCKET,cmsg_type设置为