recvmmsg()不填充msghdr.msg_namelen?

时间:2013-09-11 03:24:35

标签: c linux network-programming multicast

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

但是,msg_len设置正确。

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

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

我也尝试过调用recvmsg()。 msghdr也没有填充。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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