这个网络套接字有什么用?

Ste*_*ski 18 freebsd networking process open-files

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

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*ons 20

你可以做

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"
Run Code Online (Sandbox Code Playgroud)

查看您所有的侦听端口,但要查看 ntpd 正在运行的甜甜圈:

service ntpd status
Run Code Online (Sandbox Code Playgroud)

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

当您想连接到 Web 服务器时,您可以在浏览器中打开该站点,但下面的机器实际上将您连接到 Web 服务器 IP 上的端口 80。Web 服务器的守护进程(侦听端口 80 连接的程序)使用“套接字”来保持打开该端口,为自己保留它。一次只能有一个程序使用同一个端口。

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

编辑
更改为也考虑 UDP


B.R*_*.R. 10

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

netstat -lp -u -t

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

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

编辑:这适用于 Linux——我不知道它在 BSD 上的效果如何,因为我周围没有任何基于 BSD 的盒子。