单线程在WinSock recv()中阻塞所有其他线程

时间:2016-01-17 15:55:21

标签: c windows multithreading sockets

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

似乎服务器在单个客户端没有读取发送给它的内容时阻止所有客户端。我可以猜测它是一个管理所有连接和send()块的线程,因为它不使用select()或沿着这些行的东西。

相关问题