gpt4 book ai didi

python - 绑定(bind)到 mac os x 上的 mdns 多播地址

转载 作者:行者123 更新时间:2023-11-28 23:04:43 28 4
gpt4 key购买 nike

我想绑定(bind)到 mac os x 机器上的多播 DNS 组和端口来制作一些 bonjour 功能的原型(prototype)。但是,当我尝试绑定(bind)到端口时,出现以下错误(顺便说一句,这是从 python 运行的):

socket.error: [Errno 48] Address already in use

看起来 mDNSResponder 绑定(bind)到地址:未设置 SO_REUSEADDR 的端口。

是否有可能以允许其他代理绑定(bind)到地址:端口组合的方式运行 mDNSResponder?

最佳答案

在这种情况下,错误代码描述可能有点困惑。当一个应用程序在没有设置 SO_REUSEPORT 选项的情况下绑定(bind)到一个端口时,如果第二个应用程序试图绑定(bind)到同一个端口,则绑定(bind)将失败并出现上述错误。问题不在于绑定(bind)地址,而在于端口和 SO_REUSEPORT 标志。

顺便说一句,在 Linux 下,通过使用 SO_REUSEADDR 标志(根据 SO_REUSEPORT on linux )实现等效(多个多播监听器)功能。

第一个应用程序必须设置 SO_REUSEPORT 标志进行绑定(bind),否则它将具有独占绑定(bind),而其他应用程序绑定(bind)将失败。例如:

# For BSD based platforms.
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
sock.bind(('', MCAST_PORT))

事实证明,mDNSResponder 可以在设置 SO_REUSEPORT 标志的情况下启动,但前提是它在服务启动时无法独占绑定(bind)。您可以执行以下操作以使其进入此模式:

  1. 关闭 mDNSResponder 服务 ( more info here )
  2. 使用 SO_REUSEPORT 绑定(bind)到地址:端口
  3. 重启 mDNSResponder 服务

mDNSResponder 服务将启动并使用 SO_REUSEPORT 标志进行绑定(bind)。然后其他应用程序可以共享该端口,直到下一次重新启动。您可能需要重新启动任何使用 bonjour 的应用程序,因为它们已注册到旧的 mDNSResponder 实例。

关于python - 绑定(bind)到 mac os x 上的 mdns 多播地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342322/

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