据我所知,TCP套接字上的Keep-alive有助于了解套接字是否不仅仅是打开的,而且两个套接字之间的连接实际上是活动的。 所以,我想问一下在Winsocks2中使用Keepalive的几个问题:
保持活动选项检测到死亡套接字时会发生什么情况?
如何在不实际使用send和recv的情况下检查连接是活着还是死亡? 如果我必须使用send和recv函数,那么首先使用keep-alive是什么意思?
保持活动选项检测到死亡套接字时会发生什么情况?
连接重置,任何读取或写入都会出现“连接重置”错误。 请注意,keepalive默认情况下处于关闭状态,启用时仅默认以两小时为间隔运行。
如何在不实际使用send和recv的情况下检查连接是活着还是死亡?
你不能。 TCP / IP被故意设计为不具有“拨号音”。 它的工作方式好得多。 这是为什么它取代了所有先前的协议,如SNA的主要原因。
如果我必须使用send和recv函数,那么首先使用keep-alive是什么意思?
recv()
不会告诉你有关断开的连接。 它可能永远阻止。 你可以使用读取超时,但是你必须决定多少时间太多。 或者,您可以实现应用程序级别的PING。
保持连接状态检测连接另一端的服务器(或物理连接如网络是否中断)是否在发送消息之前已经死亡。 否则,只有在您真正尝试发送数据时才会检测到断开连接,如果您的连接由于某种原因而处于空闲状态可能需要很长时间。