我必须使用recvfrom()从多个接口接收(在编译时未知,也需要保持消息的确切顺序,而不是使用单独的系统调用依次从每个接口接收)。但我还需要访问一些只有recvmsg()提供的标志(通过调用修改的消息头的flags字段)。
是否有方法使用recvfrom()填充类似于msgheaderrecvmsg()

最佳答案

recvmsg()recvfrom()的功能超集,正如recvfrom()recv()的功能超集一样。换句话说,recvmsg()是这三个函数中最强大的一个,你可以用另外两个函数做的所有事情你也可以用recvmsg()来做。
特别是,recvfrom()的主要特性是它返回所接收消息的发送者的地址。当您使用recvmsg()时,同样的信息也可用:查看msg_namemsg_namelenstruct msghdr元素。

10-07 13:06