客户端连接到服务端后,如果服务端要关闭连接(tcp),会向客户端发送close,客户端应该回复ack,如果客户端不回复ack(网线断),那么服务器上该端口会处于 syn_wait1状态,默认的时间长度大约3分钟。如果服务器上重新启动程序,监听这个端口就会失败。
sudo sysctl -w net.ipv4.tcp_orphan_retries=3
可以解决此问题。
本命令修改了 /proc/sys/net/ipv4/tcp_orphan_retries这个文件的内容。 默认是0,linux会重试8次,指数退让后总时间很长,改成3次就会把时长缩短到2-3秒钟。