实现 Zeroconf/bonjour 需要多个套接字吗?我正在固件上实现 bonjour,我的芯片只支持一个插槽。
在我看来,至少需要两个: - 一个用于监视多播查询和公告的套接字 - 至少还有一个套接字来解析并连接到客户端
根据您要实现的目标,您可以使用套接字来侦听多播服务公告、选择服务(例如向用户提供列表)、关闭套接字然后重新使用它来连接到服务。如果您已经选择了一个,则无需继续收听服务公告,并且如果您正在使用的服务被撤回(例如提供它的设备已关闭),那么您可以返回收听多播寻找替代方案。
引用rfc:
When this document uses the term "Multicast DNS", it should be taken
to mean: "Clients performing DNS-like queries for DNS-like resource
records by sending DNS-like UDP query and response packets over IP
Multicast to UDP port 5353."
要完全实现 mDNS (Bonjour),您需要一个绑定到 224.0.0.251(保留的 IPv4 地址)的开放套接字和开放的端口 5353 以接收查询。
显然,这仅涵盖 Zeroconf 实现——无论您宣传什么服务,都需要打开更多端口和套接字。