首页 文章

Linux / C udp发送方法

提问于
浏览
3

在C中发送UDP数据包的唯一方法是使用send / sendo / write / ...调用 .

这些问题是,对于每个数据包,我需要从用户空间执行新的调用 .

有谁知道是否有一个允许类似的功能

send_packets(int socket,const char * buffer,int packetSize)

哪个会自动将缓冲区中的数据拆分为大小为packetSize的数据包(例如1472),然后将它们作为UDP数据包发送?

谢谢

2 回答

  • 1

    您可以批量原始数据包,但不能批量更高级别的协低级API适用于Wireshark等实用程序 .

    在Linux上,您可以修改内核以实现类似于 recvmmsg()sendmmsg() API,但是当我这样做时,由于界面实际使用起来有多麻烦,我只记录了性能损失 .

    这种API的用户群非常有限,好像你真的想要高性能只需转移到InfiniBand或使用Solarflare(OpenOnload)或Mellanox提供的用户空间套接字API,这取决于他们的10 GigE RDMA over Ethernet接口 .

  • 0

    该接口似乎没有捕获您的意图,您没有说明要生成多少个数据包 .

    不,我认为没有这样的电话 . 如果主要关注点是你想减少用户空间到内核空间转换的数量,我不知道更好的解决方案 .

    如果您对提供应用程序的结构感到恼火,可以考虑创建一个实现多发送语义的专用线程,这样您的主线程就可以通过一次调用来传递大量数据 .

相关问题