首页 > 解决方案 > 关于来自 sys/socket.h 的 msg_control 辅助数据

问题描述

来自https://linux.die.net/man/2/recvmsg

当调用 recvmsg() 时,msg_controllen 应该包含 msg_control 中可用缓冲区的长度;从成功调用返回后,它将包含控制消息序列的长度。消息的格式为: struct cmsghdr { socklen_t cmsg_len; /* 数据字节数,包括 hdr / int cmsg_level; /始发协议/int cmsg_type;/协议特定类型//后跟 unsigned char cmsg_data[]; */ };

1)鉴于 msg_control 是指向第一个字节的指针,“控制消息序列的长度”是序列中所有 cmsghdr 结构的字节大小,还是序列中 cmsghdr 结构的数量?

2) 是否允许制作 msghdr 结构(包含所有 cmsghdr 结构)的逐字节副本,并让相关宏(如 CMSG_FIRSTHDR())像访问原始文件一样访问副本?

标签: csockets

解决方案


推荐阅读