我使用 SetKeepAlive 方法,间隔10分钟,我得到以下跟踪而没有确认:
但如果我改为5分钟,我会得到ACK
我使用的是带有ReceiveTimeout = 0的TcpClient套接字和一个带有ReadTimeout = Timeout.Infinite的SslStream
答案 0 :(得分:0)
我找到了答案:在家里路由器(XFINITY调制解调器)需要流量来维护路由,因此5分钟工作但不是10分。一旦我把环境带到办公室,我就能够维持一个连接的插座很长一段时间。
问题不在 TcpClient 或 SetKeepAlive 功能中,而是在网络基础架构中。
只想添加到我只需要使用的帖子中:
sock.IOControl(IOControlCode.KeepAliveValues, SIO_KEEPALIVE_VALS, result);
这另一个电话没有什么不同:
Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true)