我在recvmmsg()返回后打印出msghdr.msg_namelen,但是没有设置。
但是,msg_len设置正确。
我正在侦听多播流量(即数据报)。
为了让recvmmsg()填充msghdr,我还需要做些什么吗?
我也尝试过调用recvmsg()。 msghdr也没有填充。有什么想法吗?
答案 0 :(得分:1)
在内核中,recvmsg()和recvmmsg()都有公共子语句,它只使用msg_namelen和msg_name作为输入arg。也就是说,你必须自己设置这些成员。
您可以尝试这样思考,msg_name是一个指向您在调用recvmsg()之前提供给内核的字符串区域的指针。如果你没有设置msg_namelen,内核永远不会知道msg_name区域长度,也不知道可以将多少字节复制到msg_name区域而不会导致内存访问错误。