Skip to content

Bonjour/mDNS conflict can crash gateway with unhandled CIAO cancellation rejection #71759

Description

@johnturek

Summary

When two OpenClaw gateways are running on the same host/network namespace, the Bonjour/mDNS advertiser can hit a name/hostname conflict and crash the gateway with an unhandled promise rejection from @homebridge/ciao.

This looks like a recoverable local-discovery conflict, but it currently takes down the whole gateway process.

Environment

  • OpenClaw gateway service version: 2026.4.24
  • Node: 22.22.2
  • OS: Ubuntu 24.04 on Linux 6.17.0-1011-azure
  • Runtime: systemd user service
  • Setup: two OpenClaw gateways on the same host
    • user gateway on 127.0.0.1:18789
    • second gateway on 127.0.0.1:18790

What happened

The user gateway starts successfully and reports ready, but shortly after startup the Bonjour plugin detects that the service is stuck in probing or announcing, attempts to re-advertise, and then the gateway exits because a CIAO cancellation rejection is unhandled.

Example logs:

[gateway] ready (8 plugins: acpx, active-memory, bonjour, browser, device-pair, phone-control, talk-voice, telegram; 5.8s)
[plugins] bonjour: watchdog detected non-announced service; attempting re-advertise (gateway fqdn=Claude (OpenClaw)._openclaw-gw._tcp.local. host=openclaw.local. port=18789 state=probing)
[plugins] bonjour: restarting advertiser (service stuck in probing for 8990ms (gateway fqdn=Claude (OpenClaw) (2)._openclaw-gw._tcp.local. host=openclaw-(2).local. port=18789 state=probing))
[plugins] bonjour: advertised gateway fqdn=Claude (OpenClaw) (2)._openclaw-gw._tcp.local. host=openclaw-(2).local. port=18789 state=unannounced
[openclaw] Unhandled promise rejection: CIAO PROBING CANCELLED
systemd[834]: openclaw-gateway.service: Main process exited, code=exited, status=1/FAILURE
systemd[834]: openclaw-gateway.service: Failed with result 'exit-code'.

I also saw the same failure mode with:

[openclaw] Unhandled promise rejection: CIAO ANNOUNCEMENT CANCELLED

Expected behavior

Bonjour/mDNS announcement conflicts or CIAO cancellation errors should be handled locally by the Bonjour plugin. The gateway should keep running, possibly with local discovery disabled/degraded or with a logged warning.

Actual behavior

The gateway process exits with status 1 and systemd restarts it. This can lead to a restart loop.

Workaround

Disabling Bonjour for the affected gateway avoids the crash:

[Service]
Environment=OPENCLAW_DISABLE_BONJOUR=1

After applying that systemd drop-in and restarting, the gateway stayed active and /health returned:

{"ok":true,"status":"live"}

Notes

The duplicate-gateway setup is likely what triggers this, but the crash itself appears to be caused by an unhandled cancellation rejection from the Bonjour/CIAO path. Ideally this should not terminate the whole gateway.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions