gpt4 book ai didi

macos - 为什么 OS X 允许在同一个 TCP 端口上监听两次?

转载 作者:行者123 更新时间:2023-12-04 07:56:06 25 4
gpt4 key购买 nike

我试图通过使用 netcat 监听某些端口来调试 OS X 上的 Jenkins 中的端口分配问题,这导致了一些奇怪的结果。

在 OS X 10.8.2 的终端中:

$ uname -rs
Darwin 12.2.1

$ nc -l 54321

然后在第二个终端:
$ nc -l 54321
在第三个终端中, lsof表明两个实例都绑定(bind)到同一个端口:
$ 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 也不报告该地址已被使用?

最佳答案

OS X 上的二进制文件正在设置 SO_REUSEPORT 套接字选项,它允许完全重复的绑定(bind) (setsockopt on OS X)。您可以在 OS X 上使用 dtrace 验证这一点。

Linux 上的 netcat 二进制文件不执行此操作,因此您会收到预期的绑定(bind)错误。同样,您可以使用 strace 进行验证。我相信 SO_REUSEPORT 已被弃用,甚至在较新的 Linux 内核上都不可用。

关于macos - 为什么 OS X 允许在同一个 TCP 端口上监听两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13726975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com