c++ - 在来自多个线程的阻塞套接字上使用 send()

标签 c++ windows sockets

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

我正在使用 Windows。

最佳答案

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

结果是,如果您尝试同时从多个线程将 send() 发送到同一个套接字,则 send() 可能会 (a) 挂起或 (b) 在 I/O 实际完成之前退出,从而导致灾难性的结果.

您可以使用临界区来防止发送重叠,或​​者指定线程从队列中读取要发送的数据。

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

关于c++ - 在来自多个线程的阻塞套接字上使用 send(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731725/

相关文章:

c++ - 在 Mac OS X 上编译 Vowpal Wabbit 时找不到头文件

windows - 字符串中每个空格的 VB.NET Windows 窗体

c++ - CryptDecrypt 在解密字符串的末尾返回随机字符?

C++17 标准库包括不在 Visual Studio 2017 中使用 Android 项目

python - Scrapy startproject 不适用于 git-bash

windows - 如何在 Windows 7 上安装 Web Application Stress Tool (WAST) (homer)

java - 通过服务器线程调用OSGi服务

c++ - 不循环检测连接请求

java - Socket 服务器在同一进程上一次仅接受一个连接

c++ - 如何更有效地从 vector 或集合中删除元素?