Обработка тайм-аута NWConnection
Как справиться с тайм-аутом соединения?
let connection = NWConnection(to: endpoint, using: .tcp)
connection.stateUpdateHandler = { [self] newState in
print("newState: \(newState)")
}
connection.start(queue: .main)
Бревно:
newState: preparing
nw_socket_handle_socket_event [C1.1.4.1:1] Socket SO_ERROR [60: Operation timed out]
... several more times
The stateUpdateHandler
функция больше никогда не вызывается.
1 ответ
ОказываетсяNWConnection
не реализует таймауты. Мы должны сделать это сами:
let connectionTimeout = 15
connection.start(queue: .main)
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(connectionTimeout)) { [weak self] in
guard let self = self else { return }
if self.connection.state != .ready {
self.connection.stateUpdateHandler?(.failed(.posix(.ETIMEDOUT)))
}
}