“keepalive”功能如何与套接字一起使用?

时间:2014-04-30 17:07:40

标签: sockets

在套接字中,keepalive不会关闭套接字。客户端向服务器发送keepalive标志,如果服务器同意,则不会关闭连接。如果我理解这个概念,只要客户端没有数据要发送,客户端就会向服务器发送一个keepalive数据包(包含空数据)。

但是,什么时候可以关闭套接字?

以下是我能想到的情景

  1. 服务器/客户端专门关闭连接
  2. 超时异常
  3. 路由器可以关闭连接吗?

1 个答案:

答案 0 :(得分:2)

你混淆了两种叫做keepalive的东西。

  1. 在HTTP keepalive中,默认情况下它从HTTP 1.1开启,客户端必须专门请求关闭它。在HTTP 1.0中没有这样的东西,但有一个非正式的约定来请求它:一个Connection: keep-alive标题。当使用保持活动时,在发送/接收HTTP响应之后,任何一方都不会关闭连接。如果未使用保持活动状态,则双方都会关闭连接。

  2. 在TCP keepalive中,TCP堆栈发送的序列号低于已经确认的序列号,这应该激发接收方发送带有当前序列号的ACK。

  3. 在HTTP或TCP中,连接可以随时关闭,并且对等方只需检测并处理该连接。