我们目前遇到在Windows上运行的自编服务器应用程序的问题(在不同版本上发生).服务器侦听TCP端口,接受连接,交换一些数据,然后再次关闭连接.大约有100个客户端不时连接.
有时服务器停止工作:日志文件显示仍然接受连接,但在第一次读取尝试时发生套接字错误(10054 - 由对等方重置连接).我不认为这是一个客户问题,因为它突然停止为所有客户工作.
现在我们发现,我们的旧服务器软件也出现了同样的问题,甚至用另一种编程语言编写.所以它在我们的程序中似乎不是一个错误 - 我认为它必须是某种操作系统/防火墙问题?当然,防火墙已经停用,但尚未解决问题.
任何想法在哪里研究?Wireshark日志即将推出..
摘自日志(时间戳,线程ID,消息)
11:37:56.137 T#3960 Connection from 10.21.13.3
11:37:56.138 T#3960 Client Exception: Socket Error # 10054
Connection reset by peer.
11:37:56.138 T#3960 ClientDisconnected
11:38:00.294 T#4144 Connection from 10.21.13.3
Run Code Online (Sandbox Code Playgroud)
您可以看到异常几乎在接受连接的同时发生,在这种情况下,客户端会在几秒钟后重新连接.
"有状态"防火墙或NAT会跟踪连接,并且应该为它不知道的连接发送RST.如果防火墙由于某种原因失去了连接跟踪,那么您可能会看到随机连接被重置.
我们的路由器在工作时会这样做 - 它会在PPP连接中断时忘记连接,这在下雨和DSL重启需要的时间太长时非常无益.但是,它不是重置连接,而是丢弃数据包(甚至更无用!).