什么时候TCP套接字需要保持活动状态?

时间:2014-01-19 00:06:04

标签: c++ windows keep-alive winsock2

据我所知,TCP套接字上的Keep-alive有助于了解套接字是否刚刚打开,并且两个套接字之间的连接实际上是否存在。所以,我有几个问题想询问有关Winsocks2中Keepalive的用法:

  • 当keep-alive选项检测到死套接字时会发生什么?

  • 如何在不实际使用的情况下检查连接是否存在 sendrecv?如果我必须使用sendrecv函数 首先使用keep-alive的重点是什么?

2 个答案:

答案 0 :(得分:1)

在发送邮件之前,保持活动状态会检测连接另一端的服务器(或网络中的物理链路是否已关闭)是否已经死亡。否则,只有在您实际尝试发送数据时才会检测到断开连接,如果由于某种原因您的连接空闲可能需要很长时间。

答案 1 :(得分:1)

  

当keep-alive选项检测到死套接字时会发生什么?

重置连接,任何读取或写入都会出现“连接重置”错误。请注意,默认情况下,keepalive处于关闭状态,默认情况下启用时仅以两小时的间隔运行。

  

如果没有实际使用send和recv,我如何检查连接是否存在?

你做不到。故意设计TCP / IP不具有“拨号音”。它的工作方式要好得多。这是它取代所有先前协议的主要原因,例如SNA。

  

如果我必须使用send和recv函数,那么首先使用keep-alive的重点是什么?

recv()不会告诉您连接断开的情况。它可能会永远阻止。你可以使用读取超时,但是你必须决定多少时间。或者,您可以实现应用程序级PING。