解除崩溃程序的端口绑定

bam*_*bam 5 linux tcp udp socket

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

Rui*_*iro 4

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

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

来自: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
Run Code Online (Sandbox Code Playgroud)

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

net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_tw_reuse=1
Run Code Online (Sandbox Code Playgroud)

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

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

在应用程序级别,您还可以在根据这篇文章打开袜子时指定 SO_REUSEADDR:/sf/ask/53710471/程序终止

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

service networking restart
Run Code Online (Sandbox Code Playgroud)