我读到您不应该在多线程的阻塞套接字上使用 send()
,但我不知道为什么!如果我想从多个线程使用 send()
,我可以做些什么来允许它吗?
我正在使用 Windows。
最佳答案
根本原因是同步 I/O 函数使用句柄对象(套接字被实现为句柄)来跟踪 I/O 是否完成。
结果是,如果您尝试同时从多个线程将 send() 发送到同一个套接字,则 send() 可能会 (a) 挂起或 (b) 在 I/O 实际完成之前退出,从而导致灾难性的结果.
您可以使用临界区来防止发送重叠,或者指定线程从队列中读取要发送的数据。
请注意,这仅适用于发送到相同 套接字的情况。同时发送到不同套接字是可以的。
关于c++ - 在来自多个线程的阻塞套接字上使用 send(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731725/