【发布时间】:2018-07-29 10:30:36
【问题描述】:
在使用 recvmsg 时,我使用 MSG_TRUNC 和 MSG_PEEK,如下所示:
msgLen = recvmsg(fd, &hdr, MSG_PEEK | MSG_TRUNC)
这给了我为下一条消息分配的缓冲区大小
我的问题是如何获得应该为标题内的msg_control 字段分配的缓冲区大小
【问题讨论】:
-
这看起来可能是相关的:mirbsd.org/htman/i386/man3/CMSG_DATA.htm
-
@Galik 这些宏用于缓冲区中的消息,您已经阅读了它们
-
在这种情况下,只需将数据读入完整的缓冲区,然后按照 Galik 的建议进行分解。
-
@o_weisman 我的问题是我应该分配多大的缓冲区才能接收所有消息。 Galik 提供了一个宏链接,用于在将消息从内核接收到本地缓冲区后处理缓冲区内的消息。
-
msg_control不是刚刚被调用者填写的吗?我的意思是,据文档所说,recvmsg填充了标题,所以我猜你不需要为msg_control分配存储空间。