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) {