- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 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/
我使用 recvmmsg() 使用 c 构建了一个简单的应用程序,传递的第五个参数是 type struct timespec 的超时。我将超时设置为 5 秒,但它不起作用,它会无限阻塞。 代码如下:
我在 recvmmsg() 返回后打印出 msghdr.msg_namelen 但它没有设置。 但是,msg_len 设置正确。 我正在监听多播流量(即数据报)。 为了让 recvmmsg() 填充
我正在开发一个 C++ 程序,它通过以太网使用来自 FPGA 的 UDP 数据流。 FPGA 和我的以太网卡之间没有集线器或路由器。数据为10446 pps,速率为125350.0 kbps。 我的
我在 CentOS 6.5 上,内核版本为 kernel-2.6.32-431.el6。 我试图找到 recvmmsg() 的实现,希望我没有看错源代码 ~/rpmbuild/BUILD/kernel
因为 recvmmsg() 有对应的 sendmmsg()。我想知道我们是否可以改用 sendto() 或 sendmsg(),recvmmsg() 是否仍然有效?或者我们必须使用 sendmmsg(
我是一名优秀的程序员,十分优秀!