2

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

但是, msg_len 设置正确。

我正在监听多播流量(即数据报)。

为了让 recvmmsg() 填充 msghdr,我需要做些什么吗?

我也尝试改为调用 recvmsg() 。msghdr 也没有填充。任何的想法?

4

1 回答 1

1

在内核中,recvmsg() 和 recvmsg() 都有共同的子调用,它只是使用 msg_namelen 和 msg_name 作为输入 arg。也就是说,你必须自己设置那些成员。

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

于 2013-09-11T05:23:46.773 回答