You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino实现mDNS广播触发avahi记录冲突报错及运行不稳定问题排查

问题根因

  • SRV记录结构不符合mDNS规范
    按照RFC 6763 DNS-SD规范,_apple-midi._udp.local是服务类型名称,仅用于PTR记录的所有者字段,而SRV记录的所有者字段应该是服务实例名,格式为[设备名]._apple-midi._udp.local。你当前代码中SRV记录的所有者字段直接填了服务类型名称,和PTR记录的所有者重复,导致avahi认为收到了同一名下的冲突记录,触发重置逻辑。
  • 公告发送频率严重超标
    mDNS规范要求,设备完成网络连接后仅需在启动阶段发送2次间隔1s的公告,后续常规公告间隔为120s。你当前代码每750ms就发送一次全量公告,高频发送的相同记录会被avahi判定为其他设备发起的记录抢占,持续触发冲突检测。
  • Cache-Flush位使用不当
    你给所有记录都添加了Cache-Flush标记,该标记的作用是通知接收方立即覆盖同一名下的旧缓存。你高频发送带该标记的相同记录,会反复触发avahi的缓存重置流程,既导致报错,也会让avahi-browse的展示结果随机波动。

修复建议

  1. 修改SRV记录的所有者字段,将前缀改为你的设备名mymdnstest,完整所有者为mymdnstest._apple-midi._udp.local
  2. 将公告发送间隔从750ms调整为120000ms(120秒),启动时可以额外多发送2次间隔1秒的公告加快发现速度
  3. 仅在首次公告、IP地址变更时为记录添加Cache-Flush标记,常规周期性公告可以不带该标记

内容的提问来源于stack exchange,提问作者Folkert van Heusden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:15:03