套接字recv调用冻结线程约。 5秒

时间:2011-03-23 06:07:25

标签: c++ windows sockets client-server winsock2

我有一个用C ++实现的客户端服务器体系结构,在Windows 7下使用阻塞套接字。一切都运行良好,达到一定的负载水平。如果有几个客户端(例如> 4)接收或发送兆字节数据,则有时与一个客户端的通信会冻结大约5秒钟。在这种情况下,所有其他客户都按预期工作。

缓冲区大小为8192字节,服务器端的日志记录如下:

TimeStamp(s.ms) - 收到的字节

...

1299514524.618 - 8192

1299514524.618 - 8192

1299514524.618 - 0004

1299514529.641 - 8192

1299514529.641 - 3744

1299514529.641 - 1460

1299514529.641 - 1460

1299514529.641 - 8192

...

似乎在5秒内只能读取4个字节。此外,我发现冻结时间总是大约5秒 - 从不4或更少,从不6或更多......

有什么想法吗?

祝你好运

迈克尔

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:0)

我在高负载的情况下遇到了这个问题:最后一个TCP数据包有时会在倒数第二个之前到达,因为没有为包排序定义默认堆栈, 这种障碍导致与你所描述的结果相似。

采用的解决方案是:在更多服务器中进行负载分配

相关问题