UNIX网络编程读书笔记:辅助数据
UNIX网络编程读书笔记:辅助数据
辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收。
辅助数据的另一个称谓是控制信息(control information)。
cmsg_level;
cmsg_type;
由msg_control指向的辅助数据必须为各个cmsghdr结构适当地对齐,如下所示为一种对齐方法: 如下图所示,展示了在一个控制缓冲区中出现2个辅助数据对象的一个例子: <sys/param.h>
cmsghdr *CMSG_FIRSTHDR( msghdr * cmsghdr *CMSG_NXTHDR( msghdr *mhdrptr, cmsghdr * *CMSG_DATA( cmsghdr * CMSG_LEN(unsigned CMSG_SPACE(unsigned
这些宏可以按照如下伪代码形式使用: CMSG_FIRSTHDR返回指向第一个辅助数据对象的指针,然而如果在msghdr结构中没有辅助数据(或者msg_control为一个空指针,或者cmsg_len小于一个cmsghdr结构的大小),那就返回一个空指针。当控制缓冲区中不再有下一个辅助数据对象时,CMSG_NXTHDR也返回一个空指针。 CMSG_LEN和CMSG_SPACE的区别在于,前者不计辅助数据对象中数据部分之后可能的填充字节,因而返回的是用于存放在cmsg_len成员中的值,后者计上结尾处可能的填充字节,因而返回的是用于为辅助对象动态分配空间的大小值。 control[CMSG_SPACE((
cmsghdr *
(cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR(&(cmsgptr->cmsg_level == ... && cmsgptr->cmsg_type ==*=
评论暂时关闭