我已经设置了一个udp套接字,并在每次调用时使用不同的收件人调用sendto()。

我想使用writev()来使scater/gather io受益,但是writev()不允许我像sendto()一样指定接收方地址/端口。有什么建议么?

最佳答案

如果事先使用writev指定端点,则可以使用connect将合并的缓冲区集合发送到单个端点。从(OSX)的connect(2)联机帮助页:



您不能使用writev将每个缓冲区发送到不同的端点。

使用connect / writev而不是sendto * n的潜在缺点是,这是每个writev的另一个系统调用。

如果接收者的集合是有限的(并且事先知道),则最好为每个接收者使用单独的socket,而对每个套接字仅使用connect

07-28 13:03