我可以使用sendto()或sendmsg()将数据包推送到服务器的recvmmsg()吗?

时间:2013-12-03 11:35:22

标签: c++ sockets networking udp bsd

看作recvmmsg()有一个对应的sendmmsg()。我想知道我们是否可以使用sendto()或sendmsg()代替,recvmmsg()仍然有效吗?还是我们必须使用sendmmsg()?

还有一点需要注意的是,sendto()是唯一一个不包含msghdr * msg参数的参数,在收到带有recvmmsg()的数据包后,它会在到达时被打包到msghdr中吗?

1 个答案:

答案 0 :(得分:1)

是的,他们是一回事。

来自man sendmmsg

The  sendmmsg() system call is an extension of sendmsg(2)
that allows the caller to transmit multiple messages on 
a socket using a single system call. (This has performance
benefits for some applications.)

所以基本上,当你打电话给sendmmsg(sock, msglist, n, flags)时,你正在做

for (i=0; i<n; i++)
    sendmsg(sock, msglist[i], flags);