【问题标题】:Sending from the same UDP socket in multiple threads在多个线程中从同一个 UDP 套接字发送
【发布时间】:2010-08-12 03:43:23
【问题描述】:

我有多个线程需要将 UDP 数据包发送到不同的 IP 地址(只发送,不需要接收任何内容)。我可以在所有线程中重用同一个 UDP 套接字吗?

【问题讨论】:

    标签: linux sockets udp


    【解决方案1】:

    是的,我想你可以。

    由于数据包是单独发送出去的,虽然它们的接收顺序是不确定的,但它已经是 UDP。

    所以在同一个套接字中发送多个线程就可以了。

    不过,如果您正在对套接字执行其他操作,例如 bind()、close(),那么您最终可能会遇到竞争条件,因此您可能需要小心。

    【讨论】:

      【解决方案2】:

      系统调用应该是原子的,所以形式上它对 UDP 来说似乎很好。然后内核也有错误,你正在邀请各种令人讨厌的惊喜。为什么不能在每个线程中使用套接字?它与需要连接的 TCP 不同。作为额外的奖励,您将为每个描述符获得一个单独的发送缓冲区。

      【讨论】:

      • 我不确定原子部分。例如,在 Linux 上,如果启用了抢占,系统调用就不是原子的
      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 2014-11-20
      • 2023-03-03
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多