由于 NSURLSession/NSURLConnection HTTP 加载失败,无限 pthread 创建崩溃应用程序
Infinite pthread creating crashs application due to NSURLSession/NSURLConnection HTTP load failed
我尝试连接互联网以测试应用程序中的网络,如果网络已连接或没有连接,一切顺利。但是有一个特殊的情况,当phone连上了wifi,但是wifi需要登录(也就是说连上wifi会跳转到登录页面),如果我不登录,事情变得奇怪:
应用程序检测到 wifi,但它记录(通过网络 SDK):
Update online config failed Error Domain=AVNetworkingErrorDomain Code=60 "Peer certificate cannot be authenticated with given CA certificates"
我理解这种情况,因为我没有登录。但是,会出现无限错误 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
,每个错误可能需要 5 秒。
而且会有 99% cpu 的使用率。当我使用仪器查看细节时,我发现有一个名为 _pthread_wqthread
creates infinite thread 的线程
一段时间后,应用程序崩溃了。
这是设备的 运行 日志:
Nov 28 02:49:19 XXXXXXX-iPhone bird[145] <Error>: failed uploading 1 items (273 字节) in com.apple.TextInput: <CKError 0x144e7f650: "Partial Failure" (2/1011); "Failed to modify some records"; partial errors: {
documentContent/23EAA693-9E3F-4E21-BA02-08CF972FB90B:(com.apple.TextInput:__defaultOwner__) = <CKError 0x144e676b0: "Network Failure" (4/-1202); "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “p18-ckdatabase.icloud.com” which could put your confidential information at risk.">
}>
Nov 28 02:49:24 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:49:24 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:49:38 XXXXXXX-iPhone configd[37] <Notice>: Captive: CNPluginHandler en0: Maintaining (__BUILTIN__)
Nov 28 02:49:38 XXXXXXX-iPhone configd[37] <Notice>: Captive: en0: Not probing "the wifi's name" (disabled by user)
Nov 28 02:49:38 XXXXXXX-iPhone configd[37] <Notice>: Captive: CNPluginHandler en0: Authenticated (__BUILTIN__)
Nov 28 02:49:43 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:49:43 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:49:54 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:49:54 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:50:08 XXXXXXX-iPhone kernel[0] <Notice>: 028115.172774 wlan0.A[4856] updateLinkQualityMetrics@1991:Report LQM to User Land 100, fAverageRSSI -70
Nov 28 02:50:09 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:50:09 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:50:24 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:50:24 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
我发现 -9843 表示
errSSLHostNameMismatch -9843 The host name you connected with does
not match any of the host names allowed by the certificate. This is
commonly caused by an incorrect value for the kCFStreamSSLPeerName
property within the dictionary associated with the stream’s
kCFStreamPropertySSLSettings key. Available in OS X v10.4 and later.
更多细节,我使用了AFNetworking
库。也许这个 link 也有帮助:Crash in background NSURLSession "HTTPMessage::ensureParserFinished()"
这是一个(损坏的)强制门户情况,强制门户正在使用来自不同域的响应来响应 HTTPS 请求。您的代码显然在失败后立即重试,导致大量 CPU 开销。
您需要坐下来查看 NSURL 错误代码列表,并列出永久性错误代码,即在后续尝试中不太可能消失的错误,例如服务器上的证书错误。当您的应用发现任何这些永久性错误时,它不应立即重试请求,无论是否可达。
我尝试连接互联网以测试应用程序中的网络,如果网络已连接或没有连接,一切顺利。但是有一个特殊的情况,当phone连上了wifi,但是wifi需要登录(也就是说连上wifi会跳转到登录页面),如果我不登录,事情变得奇怪:
应用程序检测到 wifi,但它记录(通过网络 SDK):
Update online config failed Error Domain=AVNetworkingErrorDomain Code=60 "Peer certificate cannot be authenticated with given CA certificates"
我理解这种情况,因为我没有登录。但是,会出现无限错误 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
,每个错误可能需要 5 秒。
而且会有 99% cpu 的使用率。当我使用仪器查看细节时,我发现有一个名为 _pthread_wqthread
creates infinite thread 的线程
一段时间后,应用程序崩溃了。
这是设备的 运行 日志:
Nov 28 02:49:19 XXXXXXX-iPhone bird[145] <Error>: failed uploading 1 items (273 字节) in com.apple.TextInput: <CKError 0x144e7f650: "Partial Failure" (2/1011); "Failed to modify some records"; partial errors: {
documentContent/23EAA693-9E3F-4E21-BA02-08CF972FB90B:(com.apple.TextInput:__defaultOwner__) = <CKError 0x144e676b0: "Network Failure" (4/-1202); "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “p18-ckdatabase.icloud.com” which could put your confidential information at risk.">
}>
Nov 28 02:49:24 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:49:24 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:49:38 XXXXXXX-iPhone configd[37] <Notice>: Captive: CNPluginHandler en0: Maintaining (__BUILTIN__)
Nov 28 02:49:38 XXXXXXX-iPhone configd[37] <Notice>: Captive: en0: Not probing "the wifi's name" (disabled by user)
Nov 28 02:49:38 XXXXXXX-iPhone configd[37] <Notice>: Captive: CNPluginHandler en0: Authenticated (__BUILTIN__)
Nov 28 02:49:43 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:49:43 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:49:54 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:49:54 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:50:08 XXXXXXX-iPhone kernel[0] <Notice>: 028115.172774 wlan0.A[4856] updateLinkQualityMetrics@1991:Report LQM to User Land 100, fAverageRSSI -70
Nov 28 02:50:09 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:50:09 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Nov 28 02:50:24 XXXXXXX-iPhone XXXXXXX[841] <Error>: SecTrustEvaluate [leaf SSLHostname]
Nov 28 02:50:24 XXXXXXX-iPhone XXXXXXX[841] <Warning>: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
我发现 -9843 表示
errSSLHostNameMismatch -9843 The host name you connected with does not match any of the host names allowed by the certificate. This is commonly caused by an incorrect value for the kCFStreamSSLPeerName property within the dictionary associated with the stream’s kCFStreamPropertySSLSettings key. Available in OS X v10.4 and later.
更多细节,我使用了AFNetworking
库。也许这个 link 也有帮助:Crash in background NSURLSession "HTTPMessage::ensureParserFinished()"
这是一个(损坏的)强制门户情况,强制门户正在使用来自不同域的响应来响应 HTTPS 请求。您的代码显然在失败后立即重试,导致大量 CPU 开销。
您需要坐下来查看 NSURL 错误代码列表,并列出永久性错误代码,即在后续尝试中不太可能消失的错误,例如服务器上的证书错误。当您的应用发现任何这些永久性错误时,它不应立即重试请求,无论是否可达。