CentOS 5.9 | 操作系统程序侦听端口,导致其不绑定

CentOS 5.9 | 操作系统程序侦听端口,导致其不绑定

我的 CentOS 机器上运行着一个绑定到端口 28960 的游戏服务器,现在当我重新启动游戏服务器时,它表示无法绑定该端口,因为它正在使用中,但这显然是因为服务器已重新启动,但端口没有关闭?如何检查程序是否正在侦听,如果没有,那么如何清除端口,以便可以在端口 28960 上启动服务器备份?

答案1

我想你可能会遇到2*MSL问题。您可以这样说:

$ netstat -na | grep 28960.*TIME_WAIT

如果您从中得到任何信息,则意味着内核的网络堆栈正在等待两倍于最大段生命周期 (MSL) 的时间,以便杂散数据包在允许重新绑定该端口之前出现。国家TIME_WAIT是个好东西。

打算在正常操作中重新启动的服务器TIME_WAIT通过设置禁用处理SO_REUSEADDR插座选项。如果您查看游戏服务器的文档,可能会有一个选项可以让您启用此行为。

如果没有,并且您无法获取修改游戏服务器的源,您唯一的选择是等待状态TIME_WAIT过期,这通常需要 30 到 120 秒。

这是我调用的一个脚本showwait,它对此类事情很有帮助:

#!/bin/sh
while [ true ]
do
    netstat -na | grep WAIT
    sleep 1
done

您只需运行它并等待它停止每秒输出行即可。然后你Ctrl-C就可以继续执行你需要做的任何事情,这要求没有等待状态。

该脚本不适合在繁忙的服务器上使用,因为那里一直处于等待状态,但是当您只是等待服务器没有其他任何事情发生时,它就完美了。

答案2

您可以尝试lsof(8)(查看手册页,它非常广泛;但只需将其输出传递到应该grep 28960可以了解发生了什么)。在任何情况下,端口 28960 都未被分配互联网号码分配机构。所以什么都不应该使用它。

相关内容