草庐IT

ios - 哪里有对 iOS 和 Mac OS X 网络错误(如 kCFStreamErrorDomainSSL)的清晰、完整的引用?

coder 2024-01-10 原文

在 Xcode 中调试网络代码时,我经常遇到如下错误序列:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

我研究这些错误的努力都没有找到对它们的引用,因此我可以按顺序调试它们,而无需对每个单独的错误进行研究。

最佳答案

经过大量搜索,我发现 Apple 自己的引用页面没有链接到相应的错误编号。然后我能够在源代码中找到适当的错误列表和枚举:

https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFStreamConstants/#//apple_ref/doc/constant_group/CFStream_Error_Domain_Constants_CFHost_

https://developer.apple.com/library/mac/documentation/Security/Reference/secureTransportRef/

http://www.opensource.apple.com/source/libsecurity_ssl/libsecurity_ssl-36800/lib/SecureTransport.h

enum {
errSSLProtocol              = -9800,    /* SSL protocol error */
errSSLNegotiation           = -9801,    /* Cipher Suite negotiation failure */
errSSLFatalAlert            = -9802,    /* Fatal alert */
errSSLWouldBlock            = -9803,    /* I/O would block (not fatal) */
errSSLSessionNotFound       = -9804,    /* attempt to restore an unknown session */
errSSLClosedGraceful        = -9805,    /* connection closed gracefully */
errSSLClosedAbort           = -9806,    /* connection closed via error */
errSSLXCertChainInvalid     = -9807,    /* invalid certificate chain */
errSSLBadCert               = -9808,    /* bad certificate format */
errSSLCrypto                = -9809,    /* underlying cryptographic error */
errSSLInternal              = -9810,    /* Internal error */
errSSLModuleAttach          = -9811,    /* module attach failure */
errSSLUnknownRootCert       = -9812,    /* valid cert chain, untrusted root */
errSSLNoRootCert            = -9813,    /* cert chain not verified by root */
errSSLCertExpired           = -9814,    /* chain had an expired cert */
errSSLCertNotYetValid       = -9815,    /* chain had a cert not yet valid */
errSSLClosedNoNotify        = -9816,    /* server closed session with no notification */
errSSLBufferOverflow        = -9817,    /* insufficient buffer provided */
errSSLBadCipherSuite        = -9818,    /* bad SSLCipherSuite */

/* fatal errors detected by peer */
errSSLPeerUnexpectedMsg     = -9819,    /* unexpected message received */
errSSLPeerBadRecordMac      = -9820,    /* bad MAC */
errSSLPeerDecryptionFail    = -9821,    /* decryption failed */
errSSLPeerRecordOverflow    = -9822,    /* record overflow */
errSSLPeerDecompressFail    = -9823,    /* decompression failure */
errSSLPeerHandshakeFail     = -9824,    /* handshake failure */
errSSLPeerBadCert           = -9825,    /* misc. bad certificate */
errSSLPeerUnsupportedCert   = -9826,    /* bad unsupported cert format */
errSSLPeerCertRevoked       = -9827,    /* certificate revoked */
errSSLPeerCertExpired       = -9828,    /* certificate expired */
errSSLPeerCertUnknown       = -9829,    /* unknown certificate */
errSSLIllegalParam          = -9830,    /* illegal parameter */
errSSLPeerUnknownCA         = -9831,    /* unknown Cert Authority */
errSSLPeerAccessDenied      = -9832,    /* access denied */
errSSLPeerDecodeError       = -9833,    /* decoding error */
errSSLPeerDecryptError      = -9834,    /* decryption error */
errSSLPeerExportRestriction = -9835,    /* export restriction */
errSSLPeerProtocolVersion   = -9836,    /* bad protocol version */
errSSLPeerInsufficientSecurity = -9837, /* insufficient security */
errSSLPeerInternalError     = -9838,    /* internal error */
errSSLPeerUserCancelled     = -9839,    /* user canceled */
errSSLPeerNoRenegotiation   = -9840,    /* no renegotiation allowed */

/* non-fatal result codes */
errSSLServerAuthCompleted   = -9841,    /* server cert is valid, or was ignored if verification disabled */
errSSLClientCertRequested   = -9842,    /* server has requested a client cert */

/* more errors detected by us */
errSSLHostNameMismatch      = -9843,    /* peer host name mismatch */
errSSLConnectionRefused     = -9844,    /* peer dropped connection before responding */
errSSLDecryptionFail        = -9845,    /* decryption failure */
errSSLBadRecordMac          = -9846,    /* bad MAC */
errSSLRecordOverflow        = -9847,    /* record overflow */
errSSLBadConfiguration      = -9848,    /* configuration error */
errSSLLast                  = -9849     /* end of range, to be deleted */
};

TL;DR 没有网页(现在除了这个)有单词 kCFStreamErrorDomainSSL 和错误编号,甚至没有 Apple 引用页面。

关于ios - 哪里有对 iOS 和 Mac OS X 网络错误(如 kCFStreamErrorDomainSSL)的清晰、完整的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877755/

有关ios - 哪里有对 iOS 和 Mac OS X 网络错误(如 kCFStreamErrorDomainSSL)的清晰、完整的引用?的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  4. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  7. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  8. ruby - Chef LW 资源属性默认值如何引用另一个属性? - 2

    我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我

  9. ruby-on-rails - ActiveRecord::Associations::CollectionProxy 从哪里获取.each 实例方法? - 2

    假设我有模型Topics和Posts,其中Topichas_many:posts和Postbelongs_to:topic。此时我的数据库中已经有了一些东西。如果我进入Rails控制台并输入Topic.find(1).posts我相信我得到了一个CollectionProxy对象。=>#]>我可以对此调用.each以获得枚举器对象。=>#]:each>我对CollectionProxy如何处理.each感到困惑。我意识到它在某些时候是继承的,但我一直在阅读API文档,他们并没有说得很清楚CollectionProxy是从什么继承的,除非我遗漏了一些明显的东西。Thispage似乎并没有

  10. ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组? - 2

    如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta

随机推荐