From dc10a13e5c5fbc6089ac718364a5fb0ed5009aed Mon Sep 17 00:00:00 2001 From: Samuel Zielke Date: Wed, 21 Oct 2026 16:07:51 +0200 Subject: [PATCH] fix(remote): retry node connections that hang after launch Right after launch macOS briefly reports 'Local network prohibited'; the connection then stayed in waiting and was never retried. Connect attempts now time out after 6 s and start over; the waiting reason is logged. Co-Authored-By: Claude Opus 5.5 --- Packages/MusubiKit/Sources/Remote/NodeBrowser.swift | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Packages/MusubiKit/Sources/Remote/NodeBrowser.swift b/Packages/MusubiKit/Sources/Remote/NodeBrowser.swift index f67cd18..bc6adbd 100644 --- a/Packages/MusubiKit/Sources/Remote/NodeBrowser.swift +++ b/Packages/MusubiKit/Sources/Remote/NodeBrowser.swift @@ -142,7 +142,8 @@ public final class NodeBrowser { node.isConnected = false node.link = nil scheduleRetry(node) - case .waiting: + case .waiting(let reason): + log.notice("Control: \(node.id, privacy: .public) waiting: \(reason.localizedDescription, privacy: .public)") link.cancel() default: break @@ -150,6 +151,16 @@ public final class NodeBrowser { } node.link = link link.start() + + // A connection can hang in preparing/waiting (e.g. local network access pending); start over. + Task { [weak self, weak node] in + try? await Task.sleep(for: .seconds(6)) + guard let self, let node, node.link === link, !node.isConnected else { return } + log.notice("Control: \(node.id, privacy: .public) not ready after 6 s, retrying") + link.cancel() + node.link = nil + scheduleRetry(node) + } } private func scheduleRetry(_ node: Node) {