我试图通过用netcat监听某些端口来调试OS X上的Jenkins中的端口分配问题,这导致了一些奇怪的结果。为什么OS X允许两次在同一个TCP端口上侦听?
在关于OS的终端X 10.8.2:
$ uname -rs
Darwin 12.2.1
$ nc -l 54321
然后,在一个第二端子:
$ nc -l 54321
而在一个第三端子,lsof
表明这两种情况下已经绑定到相同的端口:
$ lsof -i | grep 54321
nc 70706 chris 3u IPv4 0x55618c024692f4d1 0t0 TCP *:54321 (LISTEN)
nc 70769 chris 3u IPv4 0x55618c0232cb8661 0t0 TCP *:54321 (LISTEN)
在Linux上:
第一终端:
$ uname -rs
Linux 3.2.0-34-generic
$ nc -l 54321
第二终端:
$ nc -l 54321
nc: Address already in use
为什么不OS X还报告说,该地址已在使用?
我不知道'lsof -i'输出语法,但是'0x55618c024692f4d1'和'0x55618c0232cb8661'是什么?如果它是IP地址,那显然是因为监听器被绑定到特定的IP地址而不是“任何”地址。 – CodeCaster
他们是无意义的内存地址。它们唯一的目的是确定它们是两个不同的套接字(例如,不是fork()或dup()的结果)。 – duskwuff
运行'lsof -i'为我提供了27个唯一值(“DEVICE”);我相信这是一个内存地址。最后一列显示套接字绑定到'*'。 –