我已经读过你不应该在多个线程的阻塞套接字上使用send()
,但我不知道为什么!如果我想从多个线程中使用send()
,我可以做些什么来允许它吗?
我正在使用Windows。
答案 0 :(得分:0)
根本原因是同步I / O函数使用handle对象(套接字实现为句柄)来跟踪I / O是否完整。
结果是,如果您尝试同时从多个线程向同一套接字发送(),则send()可能会(1)挂起或(b)在I / O实际完成之前退出,并带来灾难性后果
您可以使用关键部分来防止发送重叠,或者使用指定的线程来读取要从队列发送的数据。
请注意,这仅适用于发送到相同套接字的情况。同时发送到不同的套接字就可以了。