2010-11-23 41 views
0

我有经由Winsock的本地连接的阻挡客户机/服务器。客户端使用firefox从网站检索数据,将某些数据传递给服务器进行额外处理。服务器总是响应,处理过程可能需要从1/10秒到几分钟。客户端除了服务器之外没有任何winsock连接;所有的网络数据都通过Firefox获取到硬盘。Winsock连接可以随机失败吗?

这种设置工作得很好,直到看似随机,客户的recv返回-1(SOCKET_ERROR),错误代码10054(WSAECONNRESET)。这意味着服务器应该终止连接,但服务器实际上仍然在等待recv,就好像没有错。在工作长达约一个半小时或之后的5分钟内,连接失败了。客户端向服务器发送约10种不同类型的请求,并且各种请求都发生故障。请求频率大致不变,大概平均每分钟10-15次。当连接中断时,两台计算机都不会遇到互联网问题,远程桌面也不会断开。

起初我以为内存泄漏,但大量的调试后,我相当肯定没有更多的存在。有时候Firefox会从事相当多的HTTP流量,所以我想也许这可能会填充可用的套接字缓冲区空间或者其他东西 - 似乎很值得怀疑,但在这一点上,我真的不确定。那么,它可能是更多的内存泄漏,也许是一个隐藏的缓冲区溢出,太多的网络流量?什么导致我的Winsock应用程序随机失败?

+1

在计算机软件中,没有什么是随机的。一切都有原因。 – 2010-11-23 20:02:43

回答

2

听起来像在工作中的防火墙。

许多防火墙都配置为终止空闲连接(即一段时间内没有数据传输的开放TCP会话)。特别是如果它是通常不持久的HTTP连接。