Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一端插座断开,防火墙?_C#_Networking_Sockets_Timeout_Firewall - Fatal编程技术网

C# 一端插座断开,防火墙?

C# 一端插座断开,防火墙?,c#,networking,sockets,timeout,firewall,C#,Networking,Sockets,Timeout,Firewall,我有一个运行了好几年的C#应用程序。它通过TCP/IP套接字连接到向我发送股票交易执行的机器 最近,我尝试将它部署到硬件防火墙后面的新数据中心的一些机器上,我开始看到一些奇怪的dis连接 当断开连接发生时,在我的应用程序(客户端)中,除了停止通过套接字接收数据外,我看不到任何异常。当我在调试器中停止receive()调用时,Wireshark确认没有数据到达套接字,并且我的应用程序的接收线程正在阻止该调用。套接字显示为在netstat中建立的 但从服务器端看,我的客户端似乎断开了连接。查看他们的

我有一个运行了好几年的C#应用程序。它通过TCP/IP套接字连接到向我发送股票交易执行的机器

最近,我尝试将它部署到硬件防火墙后面的新数据中心的一些机器上,我开始看到一些奇怪的dis连接

当断开连接发生时,在我的应用程序(客户端)中,除了停止通过套接字接收数据外,我看不到任何异常。当我在调试器中停止receive()调用时,Wireshark确认没有数据到达套接字,并且我的应用程序的接收线程正在阻止该调用。套接字显示为在netstat中建立的

但从服务器端看,我的客户端似乎断开了连接。查看他们的日志,看起来他们端的套接字通常以(nRecvd=-1,errno=104)或(nRecvd=0,errno=11)结束。(104是由对等方重置的连接)

这种断开似乎只发生在一段时间的活动之后。我现在已经解决了这个问题,在我的客户机和他们的服务器之间实现了一个心跳信号,它只需每隔20秒发送一条短消息并得到回复。这导致dis连接在过去几天内下降到0

起初,我认为硬件防火墙是问题所在。这会导致套接字在进入活动后超时。但防火墙负责人声称,该端口(8887)上的连接超时时间为2160分钟

我正在运行WindowsServer2003和.NET3.5。交易服务器是一台linux机器(我相信是sles9,但我不确定)

对可能发生的事情有什么想法吗?如果我无法访问防火墙日志,也无法更改交易服务器上的代码,那么我可以做些什么来进一步调试它

谢谢,
Mike

我会在防火墙两侧设置wiresharp,以查看TCP(以及更低级别)上发生的情况。 当管理员说“连接超时”是个问题时。这是空闲、已建立连接的超时时间吗?我想其他任何事情都没有任何意义

另外,您是否对TCP使用KeepAlive选项?这是否由防火墙转发


正如我所说,可能希望在防火墙的两侧运行wireshark…

我会在防火墙的两侧设置wiresharp,以查看TCP(以及更低级别)上发生的情况。 当管理员说“连接超时”是个问题时。这是空闲、已建立连接的超时时间吗?我想其他任何事情都没有任何意义

另外,您是否对TCP使用KeepAlive选项?这是否由防火墙转发


正如我所说的,可能希望在防火墙的两侧运行wireshark…

您所描述的是常见的,并且像您那样通过防火墙/网关实现心跳来保持TCP套接字的活动是常见的

硬件可能有2160分钟的硬超时(以我的经验,20-30分钟更为常见),但如果有任何类型的负载,连接通常会更频繁地断开。这类防火墙的资源有限,当它们需要更多的连接跟踪时,它们往往会丢弃跟踪到的最早的连接,而不考虑硬超时设置


如果您想对此进行更多调试,请在防火墙的服务器端进行嗅探,看看当服务器断开连接时会发生什么(如果有),您所描述的是常见的,并且像您这样通过防火墙/网关实现心跳以保持TCP套接字活动是常见的

硬件可能有2160分钟的硬超时(以我的经验,20-30分钟更为常见),但如果有任何类型的负载,连接通常会更频繁地断开。这类防火墙的资源有限,当它们需要更多的连接跟踪时,它们往往会丢弃跟踪到的最早的连接,而不考虑硬超时设置


如果您想进一步调试,请在防火墙的服务器端进行嗅探,看看当服务器断开连接时会发生什么情况

谢谢,只是想确保我符合防火墙假设。他们不会在从防火墙到交易服务器的路径上为我捕获任何东西。最后,它被证明是防火墙。尽管我要求10x确认端口号,但他们还是解锁了错误的端口。谢谢,只是想确保我符合防火墙假设。他们不会在从防火墙到交易服务器的路径上为我捕获任何东西。最后,它被证明是防火墙。他们打开了错误的端口,尽管我要求10x确认端口号。