发送从多个线程相同的UDP套接字

发送从多个线程相同的UDP套接字

问题描述:

我有多个线程需要发送UDP数据包到不同的IP地址(只发送,没有什么需要接收)。我可以在所有线程中重复使用相同的UDP套接字吗?发送从多个线程相同的UDP套接字

是的,我认为你可以。

由于数据包是单独发送的,尽管它们接收的顺序是非确定性的,但它已经在使用UDP。

因此,在同一套接字中的多个线程发送罚款。尽管如果你使用套接字(比如bind(),close())来做其他事情,那么你最终会遇到竞争条件,所以你可能要小心。

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

+0

我不确定原子部分。例如,在Linux上,如果启用了抢占,则系统调用不是原子的 – Emiliano 2011-06-23 08:55:33