解除崩溃程序的端口绑定

解除崩溃程序的端口绑定

有什么方法可以解除先前由某个程序崩溃时所绑定的端口的绑定吗?我不喜欢每小时重新启动开发机器。

答案1

当程序具有连接时,并且在终止进程后,可以定义端口停留的超时时间。

更改超时所涉及的内核变量是:

从:Linux TCP 调优

/proc/sys/net/ipv4/tcp_tw_reuse - 当从协议角度来看安全时,这允许为新连接重用处于 TIME_WAIT 状态的套接字。默认值为 0(禁用)。 /proc/sys/net/ipv4/tcp_fin_timeout- 此设置确定 TCP/IP 可以释放已关闭的连接并重用其资源之前必须经过的时间。在此 TIME_WAIT 状态期间,重新打开与客户端的连接的成本低于建立新连接的成本。通过减少该条目的值,TCP/IP 可以更快地释放关闭的连接,从而为新连接提供更多资源。

您可以通过以下方式暂时更改它:

sudo sysctl -w sudo sysctl -w net.ipv4.tcp_fin_timeout=30
sudo sysctl -w sudo sysctl -w net.ipv4.tcp_tw_reuse=1

或者要永久添加配置,编辑/etc/sysctl.conf并添加:

net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_tw_reuse=1

因此,它也将在启动时应用。

如需进一步指导,请阅读:减少 TIME_WAIT 套接字连接

在应用程序级别,您还可以根据这篇文章在打开袜子时指定 SO_REUSEADDR:https://stackoverflow.com/questions/767292/how-do-i-close-a-port-in-a-case-of-program-termination

正如 dr01 所说,另一种选择是手动执行:

service networking restart

相关内容