relay: fix relays refusing to reconnect after initial connect fails
When isConnecting gets stuck (e.g. from silenced error 57 or lost WebSocket events), reconnect() would bail out permanently. Instead of unconditionally blocking on isConnecting, allow reconnect if the connection attempt has gone stale (>5s with no socket response). Closes: https://github.com/damus-io/damus/issues/3774 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
07a7dbddc0
commit
d2ef0ac3b1
@@ -214,7 +214,7 @@ final class RelayConnection: ObservableObject {
|
||||
return
|
||||
}
|
||||
if nserr.domain == NSURLErrorDomain && nserr.code == -999 {
|
||||
// these aren't real error, it just means task was cancelled
|
||||
// these aren't real errors, it just means task was cancelled
|
||||
return
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
@@ -237,9 +237,9 @@ final class RelayConnection: ObservableObject {
|
||||
}
|
||||
|
||||
func reconnect() {
|
||||
guard !isConnecting && !isDisabled else {
|
||||
self.log?.add("Cancelling reconnect, already connecting")
|
||||
return // we're already trying to connect or we're disabled
|
||||
guard !isDisabled else {
|
||||
self.log?.add("Cancelling reconnect, relay is disabled")
|
||||
return
|
||||
}
|
||||
|
||||
guard !self.isConnected else {
|
||||
@@ -247,6 +247,17 @@ final class RelayConnection: ObservableObject {
|
||||
return
|
||||
}
|
||||
|
||||
// If we're already connecting, only force a reconnect if the
|
||||
// attempt has gone stale (>5s with no response from the socket)
|
||||
if isConnecting {
|
||||
let elapsed = Date.now.timeIntervalSince1970 - last_connection_attempt
|
||||
guard elapsed > 5 else {
|
||||
self.log?.add("Cancelling reconnect, already connecting")
|
||||
return
|
||||
}
|
||||
self.log?.add("Stale connection detected, forcing reconnect")
|
||||
}
|
||||
|
||||
disconnect()
|
||||
connect()
|
||||
log?.add("Reconnecting...")
|
||||
|
||||
Reference in New Issue
Block a user