Skip to content

Commit 23e6c56

Browse files
committed
fix: cancel connection when ENODATA error is encountered.
1 parent 501c6bd commit 23e6c56

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

Sources/NWWebSocket/Model/Client/NWWebSocket.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,12 @@ open class NWWebSocket: WebSocketConnection {
486486
if let error = error, shouldReportNWError(error) {
487487
delegate?.webSocketDidReceiveError(connection: self, error: error)
488488
}
489+
490+
// ENODATA: read stream is dead but connection.state reports .ready (zombie state)
491+
// Cancel to ensure connect() creates a fresh NWConnection
492+
if case let .posix(code) = error, code == .ENODATA {
493+
connection?.cancel()
494+
}
489495
pingTimer?.invalidate()
490496

491497
// Clear connection reference
@@ -523,6 +529,12 @@ open class NWWebSocket: WebSocketConnection {
523529
delegate?.webSocketDidReceiveError(connection: self, error: error)
524530
}
525531

532+
// ENODATA: read stream is dead but connection.state reports .ready (zombie state)
533+
// Cancel to ensure connect() creates a fresh NWConnection
534+
if case let .posix(code) = error, code == .ENODATA {
535+
connection?.cancel()
536+
}
537+
526538
// Only schedule disconnection if we haven't already scheduled one
527539
if isDisconnectionNWError(error) && disconnectionWorkItem == nil {
528540
let reasonData = "The websocket disconnected unexpectedly".data(using: .utf8)

0 commit comments

Comments
 (0)