recvmmsg()不填充msghdr.msg_namelen?

我在recvmmsg()返回后打印出msghdr.msg_namelen,但没有设置。

但是,msg_len设置正确。

我正在侦听多播stream量(即数据报)。

有什么我需要做recvmmsg()来填充msghdr?

我也试着调用recvmsg()来代替。 msghdr也不填充。 任何想法?

在内核中,recvmsg()和recvmmsg()都有通用的subcall,它只使用msg_namelen和msg_name作为输入参数。 也就是说,你必须自己设置这些成员。

您可以尝试这样思考,msg_name是一个指向您在调用recvmsg()之前提供给内核的字符串区域的指针。 如果不设置msg_namelen,内核永远不会知道msg_name区域的长度,不知道有多少字节可以复制到msg_name区域而不会导致内存访问错误。