我有多个线程需要向不同的IP地址发送UDP数据包(仅为发送,无需接收)。 我能在所有线程中重用相同的UDP套接字吗?
是的,我认为你可以这样做。
由于数据包是单独发送的,虽然它们接收的顺序是不确定的,但已经使用了UDP。
因此,在同一套接字上使用多个线程发送是可以的。
但是,如果您正在使用套接字进行其他操作,例如bind(),close(),那么可能会出现竞争条件,因此您需要小心。
系统调用应该是原子的,所以在UDP上似乎没有问题。但内核也有漏洞,这会引发各种严重问题。为什么不能为每个线程使用一个socket?与TCP不同,你不需要建立连接。额外的好处是你会得到每个描述符的独立发送缓冲区。