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?
Advertisement
Answer
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.