我有一个C#应用程序已运行好几年了。它通过TCP/IP套接字连接到发送股票交易执行的机器。套接字一端连接,防火墙?
最近,我试图将它部署到位于硬件防火墙后面的新数据中心中的某些机器上,并且我已经开始看到一些奇怪的断开连接。
当发生断开连接时,在我的应用程序(客户端)中,除了停止通过套接字接收数据外,没有任何异常。当我在调试器中停止它时,Wireshark确认没有数据到达套接字,并且我的应用程序的接收线程在Receive()调用上被阻塞。套接字在netstat中显示为ESTABLISHED。
但是从服务器端来看,它看起来像我的客户端正在断开连接。看看它们的日志,看起来它们的端点通常以(nRecvd = -1,errno = 104)或(nRecvd = 0,errno = 11)结束。 (104由同级重置连接)。
断开似乎只发生在一段时间的活动之后。我现在通过在我的客户端和他们的服务器之间实现心跳来解决这个问题,该服务器每20秒发送一条短消息并获得答复。这导致过去几天断开连接数降到0。
起初,我觉得硬件防火墙是个问题。它导致套接字在活动之后超时。但防火墙负责人声称,此端口上的连接超时(8887)为2160分钟。
我正在运行Windows Server 2003和.NET 3.5。交易服务器是一台Linux机器(sles9我相信虽然我不确定)。
关于可能会发生什么的任何想法?考虑到我无法访问防火墙日志并且无法更改交易服务器上的代码,我该怎么做才能进行更多的调试?
谢谢, 迈克
谢谢,只是想确保我在赛道与防火墙假设。在从防火墙到交易服务器的路径上,他们不会为我捕获任何东西。最后,它变成了防火墙。尽管我要求10x确认端口号,但他们已经解开了错误的端口。 – 2009-09-11 18:19:18