我有一个通过Winsock本地连接的阻塞客户端/服务器。客户端使用firefox从网站检索数据,将某些数据传递到服务器以进行额外处理。服务器始终响应,处理可能需要从1/10秒到几分钟。除了服务器之外,客户端没有winsock连接;所有网络数据都通过firefox检索到硬盘驱动器。
此设置运行良好,直到看似随机,客户端的recv返回-1(SOCKET_ERROR),错误代码为10054(WSAECONNRESET)。这意味着服务器应该终止连接,但服务器实际上仍在等待recv,就好像没有错。早在工作或工作约5个小时后,这种连接就失败了大约一个半小时。客户端向服务器发送大约10种不同类型的请求,并且在各种请求上发生了故障。请求的频率大致保持不变,平均每分钟10-15次。当连接断开时,计算机都不会遇到Internet问题,并且远程桌面也不会断开连接。
最初我认为内存泄漏,但经过大量调试后,我确信不再存在。 Firefox有时会涉及相当多的HTTP流量,所以我想也许可以填充可用的套接字缓冲区空间或者其他东西 - 看起来很可疑但是在这一点上我真的不确定。那么,它可能是更多内存泄漏,可能是隐藏的缓冲区溢出,网络流量过多?是什么导致我的Winsock应用程序随机失败?
答案 0 :(得分:2)
在工作中听起来像防火墙。
许多防火墙被配置为终止空闲连接(即打开TCP会话,暂时没有数据传输)。特别是如果它是HTTP连接,通常不是持久的。