fix: ignore mDNS socket errors to prevent gateway crashes

Extended ignoreCiaoCancellationRejection to also handle announcement
socket errors which are non-fatal and caused by network interface issues.

Previously, these unhandled promise rejections would crash the gateway
every ~2 minutes when mDNS announcements failed due to EAFNOSUPPORT
socket errors.

The fix allows the gateway to continue running normally even when mDNS
discovery is unavailable, since mDNS is only used for local network
discovery and not required for core gateway functionality.

Testing: Gateway remained stable for 150+ seconds after fix, compared
to crashing every ~120 seconds before (macOS 15.2 with HTTP_PROXY).
This commit is contained in:
cici1029 2026-01-29 15:04:04 +08:00
parent 718bc3f9c8
commit b806783e09

View File

@ -4,9 +4,15 @@ import { formatBonjourError } from "./bonjour-errors.js";
export function ignoreCiaoCancellationRejection(reason: unknown): boolean {
const message = formatBonjourError(reason).toUpperCase();
if (!message.includes("CIAO ANNOUNCEMENT CANCELLED")) {
return false;
// Ignore ciao cancellation rejections (normal cleanup)
if (message.includes("CIAO ANNOUNCEMENT CANCELLED")) {
logDebug(`bonjour: ignoring unhandled ciao rejection: ${formatBonjourError(reason)}`);
return true;
}
logDebug(`bonjour: ignoring unhandled ciao rejection: ${formatBonjourError(reason)}`);
return true;
// Ignore socket errors from mDNS announcements (non-fatal, can happen due to network issues)
if (message.includes("ANNOUNCEMENT FAILED") && message.includes("SOCKET ERRORS")) {
logDebug(`bonjour: ignoring mDNS socket error: ${formatBonjourError(reason)}`);
return true;
}
return false;
}