如果间隔超过5分钟,保持活动不响应ACK

时间:2015-08-11 15:43:05

标签: c# tcpclient

我使用 SetKeepAlive 方法,间隔10分钟,我得到以下跟踪而没有确认:

  • TCP:[保持活跃] Flags = ... A ....,SrcPort = 20100,DstPort = 13529,PayloadLen = 1,
  • TCP:[保持活跃] Flags = ... A ....,SrcPort = 20100,DstPort = 13529,PayloadLen = 1,
  • TCP:[保持活跃] Flags = ... A ....,SrcPort = 20100,DstPort = 13529,PayloadLen = 1,

但如果我改为5分钟,我会得到ACK

  • TCP:[保持活跃] Flags = ... A ....,SrcPort = 20100,DstPort = 15067,PayloadLen = 1,
  • TCP:[保持活力]标志= ... A ....,SrcPort = 15067,DstPort = 20100,PayloadLen = 0,

我使用的是带有ReceiveTimeout = 0的TcpClient套接字和一个带有ReadTimeout = Timeout.Infinite的SslStream

Q1)关于如何设置保持活动超过5分钟并从另一方获得确认的任何建议?

Q2)是否需要设置Keep-Alives两端?如果是,则间隔需要匹配吗?

1 个答案:

答案 0 :(得分:0)

我找到了答案:在家里路由器(XFINITY调制解调器)需要流量来维护路由,因此5分钟工作但不是10分。一旦我把环境带到办公室,我就能够维持一个连接的插座很长一段时间。

问题不在 TcpClient SetKeepAlive 功能中,而是在网络基础架构中。

只想添加到我只需要使用的帖子中:

sock.IOControl(IOControlCode.KeepAliveValues, SIO_KEEPALIVE_VALS, result);

这另一个电话没有什么不同:

Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true)