c - 单线程在 WinSock recv() 处阻塞所有其他线程

标签 c windows multithreading sockets

我有一个多线程程序,每个线程都是这样的:

thread() {
    connect();
     while(1) {
        recv();
        do_some_work();
    }
}

如果您用 sleep(5) 交换 do_some_work() 来模拟一个负载,该负载会阻塞线程并阻止其到达它的 recv() 调用所有其他线程在 recv() 处阻塞线程 sleep() 的时间。我可以使用 WireShark 看到收到的数据,这些数据是视频流,因此它们永远不会停止发送。

我想知道为什么当 WinSock(2,2) 应该是多线程时该线程会阻塞所有其他线程?

预期行为:它不应阻塞其他线程。

更新:当单个客户端不读取发送给它的内容时,服务器似乎会阻止所有客户端。我将其归咎于糟糕的服务器设计。

最佳答案

当单个客户端不读取发送给它的内容时,服务器似乎会阻止所有客户端。我可以猜测它是管理所有连接和 send() block 的单个线程,因为它不使用 select() 或类似的东西。

关于c - 单线程在 WinSock recv() 处阻塞所有其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34840328/

相关文章:

mysql - 如何在 Windows 中清除 MySQL 屏幕控制台?

c++ - Read-Write 多线程中的 Reader Preferred 和 Writer Preferred

在R中运行异步功能

c - 为什么比较 signed char 和 unsigned int 不正常?

c - 使用 strlen() 时超出时间限制错误?

c - 如何在 C 中获取 %APPDATA% 路径(Windows 7)

c++ - size_t 和 SIZE_T : is there any point to care?

c - 如何访问和使用函数中将参数获取为 void * 类型的单个位?

c++ - 仅用于解包的 C/C++ Windows+Linux ZIP 库?

c# - 动态创建线程