我有一个在Linux机器上运行的服务器应用程序。我可以从Windows / Linux计算机连接此应用程序,并且可以发送/接收数据。几个小时后,发生了一些事情,并且在客户端出现了以下错误。
在Windows上: An existing connection was forcibly closed by the remote host
在Linux上: Connection timed out
我在网上进行了搜索,发现了一些建议增加或减少OS的存活时间的帖子。但是,它对我没有用。
我是否可以解决此问题,还是应该在强制关闭连接时尝试重新连接到服务器?
编辑:我已经跟踪了情况。等待5个小时后,我向远程节点发送了数据,并发送了另一数据。发送方发送了第一个数据,但发件人发送了第二个没有响应的数据。发送方的TCP / IP堆栈通过增加重试之间的时间来重复此5次。最后,发件人重置连接。我不确定为什么会发生这种情况(可能是由于防火墙或NAT-参见2.4节),但是我采用了两种不同的方法来解决此问题:
这取决于您的应用程序应该做什么。多一点信息,也许您用于侦听和处理连接的代码可能会有所帮助。
无论如何,从技术上讲,更长的存活时间应该可以防止操作系统中断您的使用。因此,也许是造成麻烦的其他原因。
这样的事情可能是路由器故障或流量导致您的保持活动数据包丢失。如果您尚未在局域网上进行测试(不进行繁琐的流量测试),则建议您这样做。
这也可能是由于套接字的处理方式(我无法从您的问题中确定)。本文可能会有所帮助。非阻塞套接字,具有超时
我不习惯在Linux上处理连接的方式,但是我希望操作系统不会切断不必要的连接。您可以重新建立连接以进行恢复,但是您需要考虑到并非所有断开连接都是温和的,因此最终可能会在实际上希望关闭的连接上进行恢复。
由于它是TCP,因此将尽其所能进行轻微的断开连接,但是您可以发送一条自定义消息,告诉服务器或客户端在断开连接之前不要重新建立连接。这样,您绝对可以确定,尽管这样做没有必要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句