【发布时间】:2014-02-08 07:07:06
【问题描述】:
据我所知,TCP 套接字上的 Keep-alive 有助于了解套接字是否刚刚打开并且两个套接字之间的连接实际上是活动的。所以,关于在 Winsocks2 中 Keepalive 的使用,我有几个问题想咨询:
【问题讨论】:
标签: c++ windows keep-alive winsock2
据我所知,TCP 套接字上的 Keep-alive 有助于了解套接字是否刚刚打开并且两个套接字之间的连接实际上是活动的。所以,关于在 Winsocks2 中 Keepalive 的使用,我有几个问题想咨询:
【问题讨论】:
标签: c++ windows keep-alive winsock2
Keep alive 会在您发送消息之前检测连接另一端的服务器(或物理链接,例如网络关闭)是否已停止运行。否则,只有在您实际尝试发送数据时才会检测到断开连接,如果您的连接由于某种原因处于空闲状态,则可能需要很长时间。
【讨论】:
当 keep-alive 选项检测到死套接字时会发生什么?
连接被重置,任何读取或写入都会出现“连接重置”错误。请注意,keepalive 默认关闭,启用后默认仅以两小时为间隔运行。
如何在不实际使用 send 和 recv 的情况下检查连接是活动的还是死的?
你不能。 TCP/IP 特意设计为没有“拨号音”。这种方式效果更好。这是它取代了所有先前协议(如 SNA)的主要原因。
如果我必须使用 send 和 recv 函数,那么首先使用 keep-alive 有什么意义?
recv() 不会告诉您连接中断的情况。它可能会永远阻塞。您可以使用读取超时,但是您必须决定多少时间是太多了。或者,您可以实现应用程序级 PING。
【讨论】: