我有一个客户端和服务器在同一台Linux机器上运行,并且它们之间有TCP连接。 我观察到,当我杀死客户端时,内核/操作系统会在客户端被杀死后的确切两秒钟后发送RST数据包。 我的问题是哪个内核参数或Socket选项控制这个计时器(2秒)?
我有一个客户端和服务器在同一台Linux机器上运行,并且它们之间有TCP连接。 我观察到,当我杀死客户端时,内核/操作系统会在客户端被杀死后的确切两秒钟后发送RST数据包。 我的问题是哪个内核参数或Socket选项控制这个计时器(2秒)?
RST
,而是发送FIN
。当你关闭客户端时,会在连接上发送一个FIN
,以向服务器指示客户端将不再发送任何数据。但是,当客户端被关闭时,服务器显然没有注意到接收到的FIN
(即它需要尝试在套接字上进行recv
,并适当地对其将获得的文件结束指示做出反应--通常意味着close
自己的套接字)。随后,服务器尝试向客户端send
数据,但连接已关闭。这导致发送RST
数据包。 RST
的意思是(大致):“没有可用的活动连接来接收您正在发送的数据;发送更多数据是无意义的。” 因此,RST
的时间很可能基于服务器下一次尝试向客户端send
,而不是任何内核/操作系统配置设置。如果服务器既不尝试send
也不close
,则连接应该永远处于空闲状态,不会发送RST
。
kill -9 <client_pid>
来终止它。因此,客户端将没有时间关闭套接字。 - rohitsoren