URLSessionWebSocketTask. on/off wifi, reconnect but get error URLError.notConnectedToInternet. Reproduce on iOS 18

We use URLSessionWebSocketTask for web socket connection. When get error we reconnect - recreate new URLSessionWebSocketTask.

Test case: off wifi on iOS device; get error(s) URLError.notConnectedToInternet. When on wifi correct create new task with connect. This working on iOS 12, 14, 15, 16, 17. But on iOS 18 we get error URLError.notConnectedToInternet without correct connection.

class WebSocketManager {
...
    func openConnection() {
        webSocketTask?.cancel(with: .goingAway, reason: nil)
        webSocketTask = urlSession?.webSocketTask(with: urlRequest)
        webSocketTask?.resume()

        listen()
    }

    func closeConnection() {
        webSocketTask?.cancel(with: .goingAway, reason: nil)
        webSocketTask = nil
    }

    private func listen() {
        webSocketTask?.receive { [weak self] result in
            guard let self else { return }

            switch result {
            case .failure(let error):
                delegate?.webSocketManager(self, error: error)
            case .success(let message):
                switch message {
                case .string(let text):
                    delegate?.webSocketManager(self, message: .text(text))
                case .data(let data):
                    delegate?.webSocketManager(self, message: .data(data))
                @unknown default:
                    fatalError()
                }

                listen()
            }
        }
    }
}

Delegate:

    func webSocketManager(_ webSocketManager: WebSocketManagerType, error: Error) {
       webSocketManager.openConnection()
    }
Answered by DTS Engineer in 824180022

If this was working on previous releases but is failing now, you should feel free to file a bug about that. If you do, please post your bug number, just for the record.

However, my medium-term advice is that you move your WebSocket code to Network framework. TN3151 Choosing the right networking API expresses a general preference for WebSocket, and I explain the rationale in more detail in this thread.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

*iOS 13, 14, 15, 16, 17.

Accepted Answer

If this was working on previous releases but is failing now, you should feel free to file a bug about that. If you do, please post your bug number, just for the record.

However, my medium-term advice is that you move your WebSocket code to Network framework. TN3151 Choosing the right networking API expresses a general preference for WebSocket, and I explain the rationale in more detail in this thread.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

URLSessionWebSocketTask. on/off wifi, reconnect but get error URLError.notConnectedToInternet. Reproduce on iOS 18
 
 
Q