c - recvmmsg() 不填充 msghdr.msg_namelen?

标签 c linux network-programming multicast

我在 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/

相关文章:

c - jni - native 处理速度慢

谁能帮助我理解这个特殊的 union 例子?

c - 使用 libcurl 监控网络状态

c - 我如何才能不卡住单击后处理信息的 GTK 按钮?

C: 未初始化的 int 类型大小必须大于

c - 使用 fputs 写入文件

c - 如何在混杂模式下创建一个 tcp 套接字?

C Makefile 故障 : "gcc: -lm: linker input file unused because linking not done mpicc -lm 3D-ELM.o -o 3D-ELM.exe"

swift - 如何引用作为关联类型的协议(protocol)的属性?

http - 写一个http嗅探器