

























@@ -363,7 +363,8 @@ export async function startGatewayBonjourAdvertiser(
363363}
364364365365if (classification.kind === "cancellation") {
366-logger.debug(`bonjour: ignoring unhandled ciao rejection: ${classification.formatted}`);
366+logger.warn(`bonjour: suppressing ciao cancellation: ${classification.formatted}`);
367+requestCiaoRecovery?.(classification);
367368} else if (classification.kind === "interface-enumeration-failure") {
368369// Restricted sandboxes can refuse os.networkInterfaces(); mDNS cannot
369370// function without it, so surface a single warning and skip recovery.
@@ -490,6 +491,28 @@ export async function startGatewayBonjourAdvertiser(
490491}
491492}
492493494+function handleAdvertiseFailure(
495+label: string,
496+svc: BonjourService,
497+err: unknown,
498+action: "failed" | "threw",
499+) {
500+const classification = classifyCiaoProcessError(err);
501+if (classification) {
502+logger.warn(
503+`bonjour: advertise ${action} with ciao ${classification.kind} (${serviceSummary(
504+ label,
505+ svc,
506+ )}): ${classification.formatted}`,
507+);
508+requestCiaoRecovery?.(classification);
509+return;
510+}
511+logger.warn(
512+`bonjour: advertise ${action} (${serviceSummary(label, svc)}): ${formatBonjourError(err)}`,
513+);
514+}
515+493516function startAdvertising(services: Array<{ label: string; svc: BonjourService }>) {
494517for (const { label, svc } of services) {
495518try {
@@ -499,14 +522,10 @@ export async function startGatewayBonjourAdvertiser(
499522logger.info(`bonjour: advertised ${serviceSummary(label, svc)}`);
500523})
501524.catch((err) => {
502-logger.warn(
503-`bonjour: advertise failed (${serviceSummary(label, svc)}): ${formatBonjourError(err)}`,
504-);
525+handleAdvertiseFailure(label, svc, err, "failed");
505526});
506527} catch (err) {
507-logger.warn(
508-`bonjour: advertise threw (${serviceSummary(label, svc)}): ${formatBonjourError(err)}`,
509-);
528+handleAdvertiseFailure(label, svc, err, "threw");
510529}
511530}
512531}
@@ -523,8 +542,6 @@ export async function startGatewayBonjourAdvertiser(
523542let consecutiveRestarts = 0;
524543let cycle: BonjourCycle | null = createCycle();
525544const stateTracker = new Map<string, ServiceStateTracker>();
526-attachConflictListeners(cycle.services);
527-startAdvertising(cycle.services);
528545529546const updateStateTrackers = (services: Array<{ label: string; svc: BonjourService }>) => {
530547const now = Date.now();
@@ -578,6 +595,8 @@ export async function startGatewayBonjourAdvertiser(
578595requestCiaoRecovery = (classification) => {
579596void recreateAdvertiser(`ciao ${classification.kind}: ${classification.formatted}`);
580597};
598+attachConflictListeners(cycle.services);
599+startAdvertising(cycle.services);
581600582601const lastRepairAttempt = new Map<string, number>();
583602const watchdog = setInterval(() => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。