【发布时间】:2010-08-12 03:43:23
【问题描述】:
我有多个线程需要将 UDP 数据包发送到不同的 IP 地址(只发送,不需要接收任何内容)。我可以在所有线程中重用同一个 UDP 套接字吗?
【问题讨论】:
我有多个线程需要将 UDP 数据包发送到不同的 IP 地址(只发送,不需要接收任何内容)。我可以在所有线程中重用同一个 UDP 套接字吗?
【问题讨论】:
是的,我想你可以。
由于数据包是单独发送出去的,虽然它们的接收顺序是不确定的,但它已经是 UDP。
所以在同一个套接字中发送多个线程就可以了。
不过,如果您正在对套接字执行其他操作,例如 bind()、close(),那么您最终可能会遇到竞争条件,因此您可能需要小心。
【讨论】:
系统调用应该是原子的,所以形式上它对 UDP 来说似乎很好。然后内核也有错误,你正在邀请各种令人讨厌的惊喜。为什么不能在每个线程中使用套接字?它与需要连接的 TCP 不同。作为额外的奖励,您将为每个描述符获得一个单独的发送缓冲区。
【讨论】: