【发布时间】:2011-05-12 12:57:04
【问题描述】:
我们目前在 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
您可以看到异常几乎在连接被接受的同时发生,在这种情况下客户端会在几秒钟后重新连接。
【问题讨论】:
-
我认为这是 Windows,对吗?您在此服务器上运行什么应用程序?是否使用 TCP keepalives?
-
这个问题至少出现在windows 2000和windows 2008r2上,应用是自写的。谢谢,我将此信息添加到问题中。
-
你看过这篇msdn文章吗? Windows Socket Error Codes 值得从客户端和服务器端进行调查。你熟悉wireshark吗?
-
MSDN 说它可能是客户端(它是第三方硬件),或者 TCP 保持连接超时(这不太可能在连接被接受的同一时刻发生?)。我知道wireshark,但我们目前不能在客户那里使用它——在我们的测试环境中,一切都按预期工作。
-
我认为假设两种不同语言的实现可以消除服务器代码的错误可能是错误的,特别是如果第一个实现是对第二个实现的引用。此外,您的实验室测试是否会产生重叠的并行连接?实验室拓扑和生产设置有何不同?
标签: tcp serversocket