什么在使用这个网络套接字?

什么在使用这个网络套接字?

我正在尝试使用 NTP 来更新我的计算机上的时间。但是,它给了我一个错误:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

错误“套接字正在使用中”是什么意思?我怎样才能看到什么正在使用这个套接字?

这种情况发生在我的 CentOS 4.x 系统上,但我也在 FreeBSD 7.x、Ubuntu 10.04 和 Solaris 10 上看到它。

答案1

你可以做

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

查看所有监听端口,但 ntpd 正在运行:

service ntpd status

至于“正在使用的套接字是什么意思”?如果我可以原谅我抚平一些皱纹(对于非常基本的解释,其中大部分的道歉对您来说是补救措施)...TCP/IP(互联网语言)指定每台计算机都有一个 IP 地址,它在互联网上唯一标识该计算机。此外,每个 IP 地址上还有 65,000 个可连接的编号端口。

当您想要连接到 Web 服务器时,您可以在浏览器中打开该站点,但底层的机器实际上是将您连接到 Web 服务器 IP 上的端口 80。 Web 服务器的守护进程(侦听端口 80 连接的程序)使用“套接字”来保持该端口的打开状态,并将其保留给自己。同一时间只有一个程序可以使用同一端口。

由于您运行了 ntpd,因此它正在使用该端口。 “ntpdate”尝试访问该端口,但由于它已保持打开状态,因此您收到“套接字已在使用中”错误。

编辑
也更改为 UDP 帐户

答案2

您还可以使用 netstat 来查找打开的套接字 - 它比使用 lsof 干净得多,正如其他海报所建议的那样。以 root 身份尝试此命令行

netstat -lp -u -t

查看所有监听连接,包括其关联的 pid 和程序。 -l 参数指定侦听连接,-p 指定您想要查看 PID/名称,-t 和 -u 告诉 netstat 您只需要 TCP 和 UDP 连接(IPv4 和 IPv6)。

如果您想查看数字端口和主机名(即,在主机的情况下未解析,在端口的情况下未转换为服务名称),您可以添加-n到上面的命令行。

编辑:这可以在 Linux 上运行——我不知道它在 BSD 上运行得如何,因为我周围没有任何基于 BSD 的机器。

答案3

在 FreeBSD 上,如果 lsof 不起作用(例如,在出于某种原因没有 /dev/mem 的虚拟化系统上),您还可以使用 sockstat。要获取所有正在侦听 IPv4 套接字的程序的列表:

sockstat -l4

答案4

您可以使用lsof来查找哪个应用程序正在使用此套接字。

相关内容