【问题标题】:Send multiple datagrams using a single send() call?使用单个 send() 调用发送多个数据报?
【发布时间】:2009-03-10 16:20:06
【问题描述】:

当基于数据报的套接字(原始套接字或 UDP)与聚集式发送一起使用时,所有数据都连接起来形成一个 IP 数据包。有没有办法通过一次调用发送多个数据报?

【问题讨论】:

    标签: sockets datagram


    【解决方案1】:

    您正在寻找的电话是sendmmsg(),但它尚未实施,甚至还没有进行很多讨论。您可以在最新的 2.6.3 Linux 内核中看到它的接收端孪生recvmmsg()

    【讨论】:

    • Linux 3.0 中添加了sendmmsg() 系统调用。在 2.14 版本中添加了对 glibc 的支持。
    【解决方案2】:

    我不这么认为...您希望 IP 堆栈如何推断您希望数据包数据报在哪里?

    【讨论】:

    • 每个iovec一个单独的数据报?
    【解决方案3】:

    您的问题有点有趣,因为顾名思义,gather 风格的 send() 从内存中的多个位置收集数据并将其放在一个缓冲区中,然后发送。

    因此,您有多个数据部分要发送多个数据报。为什么不通过单独的调用来发送它们?

    你实际上可以在数据报套接字上调用 connect() 来指定一个默认目标,这样你就可以发送() 或 write() 而无需每次都指定目标地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 2018-09-16
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多