我必须使用recvfrom()
从多个接口接收(在编译时未知,也需要保持消息的确切顺序,而不是使用单独的系统调用依次从每个接口接收)。但我还需要访问一些只有recvmsg()
提供的标志(通过调用修改的消息头的flags
字段)。
是否有方法使用recvfrom()
填充类似于msgheader
的recvmsg()
?
最佳答案
recvmsg()
是recvfrom()
的功能超集,正如recvfrom()
是recv()
的功能超集一样。换句话说,recvmsg()
是这三个函数中最强大的一个,你可以用另外两个函数做的所有事情你也可以用recvmsg()
来做。
特别是,recvfrom()
的主要特性是它返回所接收消息的发送者的地址。当您使用recvmsg()
时,同样的信息也可用:查看msg_name
的msg_namelen
和struct msghdr
元素。