在多个线程中从相同的UDP套接字发送信息

5

我有多个线程需要向不同的IP地址发送UDP数据包(仅为发送,无需接收)。 我能在所有线程中重用相同的UDP套接字吗?

2个回答

4

是的,我认为你可以这样做。

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

因此,在同一套接字上使用多个线程发送是可以的。

但是,如果您正在使用套接字进行其他操作,例如bind(),close(),那么可能会出现竞争条件,因此您需要小心。


2

系统调用应该是原子的,所以在UDP上似乎没有问题。但内核也有漏洞,这会引发各种严重问题。为什么不能为每个线程使用一个socket?与TCP不同,你不需要建立连接。额外的好处是你会得到每个描述符的独立发送缓冲区。


我不确定原子部分。例如,在Linux上,如果启用了抢占,则系统调用不是原子的。 - Emiliano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接