linuxsocketsnetwork-programmingudpsendto

Combining sento() write writev()?


I've set a udp socket and call sendto() with a different recipient at each call.

I would like to use writev() in order to benefit scater/gather io but writev() does not allows me to specify the recipient addr/port as in sendto(). Any suggestions?


Solution

  • You can use writev to send a coalesced set of buffers to a single end point if you use connect to specify the end point beforehand. From the (OSX) manpage for connect(2):

    datagram sockets may use connect() multiple times to change their association

    You cannot use writev to send each buffer to a different endpoint.

    A potential downside of using connect / writev instead of sendto*n is that it is yet another system call per writev.

    If the set of recipients is limited (and known in advance) it may be preferable to use a separate socket per recipient and just connect each socket once.