在多个线程的阻塞套接字上使用send()

时间:2015-02-25 23:26:44

标签: c++ windows sockets

我已经读过你不应该在多个线程的阻塞套接字上使用send(),但我不知道为什么!如果我想从多个线程中使用send(),我可以做些什么来允许它吗?

我正在使用Windows。

1 个答案:

答案 0 :(得分:0)

根本原因是同步I / O函数使用handle对象(套接字实现为句柄)来跟踪I / O是否完整。

结果是,如果您尝试同时从多个线程向同一套接字发送(),则send()可能会(1)挂起或(b)在I / O实际完成之前退出,并带来灾难性后果

您可以使用关键部分来防止发送重叠,或​​者使用指定的线程来读取要从队列发送的数据。

请注意,这仅适用于发送到相同套接字的情况。同时发送到不同的套接字就可以了。