Linux / C udp发送方法

| 在C中发送UDP数据包的唯一方法是使用send / sendo / write / ...调用。 这些问题是,对于每个数据包,我需要从用户空间执行一个新的调用。 有谁知道是否有一个功能允许类似 send_packets(int socket,const char * buffer,int packetSize) 哪个系统会自动将缓冲区中的数据拆分为大小为packetSize(例如1472)的数据包,然后将其作为UDP数据包发送? 谢谢     
已邀请:
        您可以批处理原始数据包,但不能批处理更高级别的协议。低级API适用于Wireshark等实用程序。 在Linux上,您可以修改内核以实现类似于
recvmmsg()
sendmmsg()
API,但是当我这样做时,由于该接口实际使用起来非常繁琐,因此我仅记录了性能损失。 这样的API的用户群非常有限,就好像您真的想要高性能一样,只需移至InfiniBand或使用Solarflare(OpenOnload)或Mellanox提供的用户空间套接字API,这取决于它们的10 GigE RDMA over Ethernet接口。     
        该界面似乎并没有抓住您的意图,也没有说要生成多少个数据包。 不,我不认为有这样的电话。如果主要关注点是您希望减少从用户空间到内核空间的转换次数,那么我不知道有更好的解决方案。 如果您只是对应用程序的结构感到恼火,可以考虑创建一个实现多发送语义的专用线程,这样您的主线程就可以通过一次调用传递大量数据。     

要回复问题请先登录注册