我已经设置了一个 udp 套接字,并在每次调用时使用不同的接收者调用 sendto()。
我想使用 writev() 来使 scater/gather io 受益,但是 writev() 不允许我像在 sendto() 中那样指定接收者地址/端口。有什么建议吗?
最佳答案
在 Linux 上,有 sendmmsg(2)
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.)
原型(prototype)是:
int sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
unsigned int flags);
struct mmsghdr {
struct msghdr msg_hdr; /* Message header */
unsigned int msg_len; /* Number of bytes transmitted */
};
由于地址和 i/o 向量都在 struct msghdr
中指定,您既可以发送到多个目的地,也可以使用分散/聚集。
关于linux - 结合sento()写writev()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355565/