URLSession 过早超时,_kCFStreamErrorCodeKey=60

pbm*_*pbm 5 ios

我有使用 URLSession 的工作代码。当服务器没有响应并且请求超时时,我正在测试行为。我的请求超时时间不能超过 25 秒。

let session: URLSession = {
    let config = URLSessionConfiguration.default
    config.timeoutIntervalForRequest = <various values in seconds I fill in>
    return URLSession(configuration: config)
}()
Run Code Online (Sandbox Code Playgroud)

如果我设置 timeoutIntervalForRequest=5 或 10 请求将在 5 或 10 秒内超时,并且我看到此预期错误:

错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。” 的UserInfo = {NSUnderlyingError = 0x15e6d1020 {错误域= kCFErrorDomainCFNetwork代码= -1001 “(空)”的UserInfo = {_ kCFStreamErrorCodeKey = -2102,_kCFStreamErrorDomainKey = 4}},NSErrorFailingURLStringKey = http://10.0.0.91:8084/margtest1/DatabaseServlet, NSErrorFailingURLKey= http://10.0.0.91:8084/margtest1/DatabaseServlet , _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=请求超时。}

如果我在请求后大约 25 秒设置 timeoutIntervalForRequest=60(或更多),我会看到以下错误日志:

错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。” UserInfo={NSUnderlyingError=0x12d896d50 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=60, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey= http ://10.0.0.91marilingKeyServletFailingKey/NSErrorFailingURLStringKey= http://10.0.0.91:808 = http://10.0.0.91:8084/margtest1/DatabaseServlet , _kCFStreamErrorCodeKey=60, NSLocalizedDescription=请求超时。}

CloudSync db DL 失败。同步失败。

这些日志之间的区别在于,当请求超时时间早于timeoutIntervalForRequest我收到_kCFStreamErrorCodeKey=60。NSUnderlyingError 也不同。

总结一下,即使我设置 timeoutIntervalForRequest > 25,我的请求也会在大约 25 秒内超时。发生这种情况时,我会看到 -kCFStreamErrorCodeKey=60。

我花了几个小时在互联网上搜索解释或调试方法。您能否建议如何解决此问题或调试此类问题的方法?提前致谢!