Wow, that is peculiar, because I see the following (I tested this on macOS 11.2.3, and also on 10.15).
Code Block 2021-04-21 10:21:37.405632+0200 TestWS[33054:327404] sending message 2 |
2021-04-21 10:21:37.406341+0200 TestWS[33054:327901] did send message 2, error: <nil> |
2021-04-21 10:21:47.404558+0200 TestWS[33054:327404] sending message 3 |
2021-04-21 10:21:47.405089+0200 TestWS[33054:327901] did send message 3, error: <nil> |
2021-04-21 10:21:50.075241+0200 TestWS[33054:328200] Connection 1: encountered error(1:53) ==> Wifi capped here |
2021-04-21 10:21:57.403576+0200 TestWS[33054:327404] sending message 4 |
2021-04-21 10:21:57.404152+0200 TestWS[33054:328571] did send message 4, error: <nil> ==> no error sending a message |
2021-04-21 10:22:07.404181+0200 TestWS[33054:327404] sending message 5 |
2021-04-21 10:22:07.404884+0200 TestWS[33054:328640] did send message 5, error: <nil> ==> no error sending a message |
2021-04-21 10:22:17.403530+0200 TestWS[33054:327404] sending message 6 |
2021-04-21 10:22:17.404037+0200 TestWS[33054:328731] did send message 6, error: <nil> ==> no error sending a message |
2021-04-21 10:22:27.403033+0200 TestWS[33054:327404] sending message 7 |
2021-04-21 10:22:27.403717+0200 TestWS[33054:328816] did send message 7, error: <nil> ==> no error sending a message |
2021-04-21 10:22:30.558273+0200 TestWS[33054:328816] [connection] nw_socket_handle_socket_event [C1.1:3] Socket SO_ERROR [60: Operation timed out] ==> finally we get the timeout error |
2021-04-21 10:22:30.558689+0200 TestWS[33054:328816] [connection] nw_read_request_report [C1] Receive failed with error "Operation timed out" |
2021-04-21 10:22:30.559008+0200 TestWS[33054:328640] [websocket] Read completed with an error Operation timed out |
2021-04-21 10:22:37.402583+0200 TestWS[33054:327404] sending message 8 |
2021-04-21 10:22:37.403010+0200 TestWS[33054:328920] did send message 8, error: Error Domain=kNWErrorDomainPOSIX Code=60 "Operation timed out" UserInfo={NSDescription=Operation timed out} ==> and only after that does sending a message give an error |
One can see that after capping the connection, sending messages still completes without any error for 40 seconds, until the timeout error occurs.
This makes me wonder if I misconfigure the session somehow? Basically, what I'm doing is the following:
Code Block Swiftpublic class WSService: NSObject { |
lazy var queue = OperationQueue() |
lazy var request: URLRequest = { |
var request = URLRequest(url: URL(string: "wss://echo.websocket.org")!) |
request.networkServiceType = .responsiveData |
request.timeoutInterval = 10 |
return request |
}() |
|
lazy var session: URLSession = { |
URLSession(configuration: .ephemeral, delegate: self, delegateQueue: self.queue) |
}() |
|
lazy var task = session.webSocketTask(with: self.request) |
|
public func start() { |
self.task.resume() |
} |
|
var msgCount: Int = 0 |
func sendMessage(_ string: String) { |
let theCount = msgCount |
msgCount += 1 |
os_log("sending message %i", theCount) |
self.task.send(.string(string)) { error in |
os_log("did send message %i, error: %@", theCount, error == nil ? "<nil>" : error.debugDescription) |
return |
} |
} |
} |