我在 recvmmsg() 返回后打印出 msghdr.msg_namelen 但它没有设置。
但是,msg_len 设置正确。
我正在监听多播流量(即数据报)。
为了让 recvmmsg() 填充 msghdr,我需要做些什么吗?
我也试过调用 recvmsg() 来代替。 msghdr 也没有填充。有什么想法吗?
最佳答案
在内核中,recvmsg() 和 recvmmsg() 都有共同的子调用,它只使用 msg_namelen 和 msg_name 作为输入参数。也就是说,你必须自己设置那些成员。
您可以尝试这样想,msg_name 是一个指向字符串区域的指针,您在调用 recvmsg() 之前提供给内核。如果不设置msg_namelen,内核将永远不知道msg_name 区域的长度,也不知道在不导致内存访问错误的情况下可以将多少字节复制到msg_name 区域。
关于c - recvmmsg() 不填充 msghdr.msg_namelen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18732155/