SSL_read 返回值为0困惑
2012-11-22 15:41
1116 查看
SSL_read的原型是:
int SSL_read(SSL *ssl, void *buf, int num);
open ssl的文档这样说:
SSL_read是工作在SSL/TLS的记录之上的。数据按照记录来接收的(最大记住是16KB SSLv3/TLS)。只有在一个记录被完整接收之后才会被处理(解密和验证)。因此SSL_read只会在记录数据都读取成功了才能返回数据,否则SSL_read只会触发读取下一个记录组。如果num的数量比缓冲的数据量大,那么SSL_read会返回缓冲区的内容;如果缓冲区没有内容,那么触发读取下个记录。SSL_read最多返回的就是一个记录的长度。由于SSL/TLS记录的大小可能超过底层TCP包的大小,所以有可能需要让SSL读取多个TCP包,SSL_read才能成功。
从这段介绍来看,SSL_read可能返回失败或者1到记录大小。那么一个记录到底实际有多大?
从我的测试来看,我调用返回从来没有超过1024字节;难道OpenSSL为了性能改进尽量保证每个SSL_read能成功,自动将SSL记录设置成小于TCP分组的大小?
另外测试当中还发现以下两种情况:
1.当返回值小于1024的时候,SSL_errno等于0,errno也等于0
2.当传递的num等于0的时候,SSL_errno等于5,但这个时候不是表明连接被关闭了。
通过自己的测试发现当数据小于1024字节时,SSL_read返回值为0……
引用:http://www.cppblog.com/windcsn/archive/2012/01/05/163631.html
int SSL_read(SSL *ssl, void *buf, int num);
open ssl的文档这样说:
SSL_read是工作在SSL/TLS的记录之上的。数据按照记录来接收的(最大记住是16KB SSLv3/TLS)。只有在一个记录被完整接收之后才会被处理(解密和验证)。因此SSL_read只会在记录数据都读取成功了才能返回数据,否则SSL_read只会触发读取下一个记录组。如果num的数量比缓冲的数据量大,那么SSL_read会返回缓冲区的内容;如果缓冲区没有内容,那么触发读取下个记录。SSL_read最多返回的就是一个记录的长度。由于SSL/TLS记录的大小可能超过底层TCP包的大小,所以有可能需要让SSL读取多个TCP包,SSL_read才能成功。
从这段介绍来看,SSL_read可能返回失败或者1到记录大小。那么一个记录到底实际有多大?
从我的测试来看,我调用返回从来没有超过1024字节;难道OpenSSL为了性能改进尽量保证每个SSL_read能成功,自动将SSL记录设置成小于TCP分组的大小?
另外测试当中还发现以下两种情况:
1.当返回值小于1024的时候,SSL_errno等于0,errno也等于0
2.当传递的num等于0的时候,SSL_errno等于5,但这个时候不是表明连接被关闭了。
通过自己的测试发现当数据小于1024字节时,SSL_read返回值为0……
引用:http://www.cppblog.com/windcsn/archive/2012/01/05/163631.html
相关文章推荐
- cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题
- atal: unable to access 'https://github.com/Homebrew/brew/': SSLRead() return error -9806
- SSL_connect: error in SSLv2/v3 read server hello A
- ruby SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
- 解决OSX上面PHP curl SSLRead() error
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)
- WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于 readn、writen 函数--read返回值分析
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- open-falcon ---安装Dashboard时候报错"SSLError: The read operation timed out"
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
- java nio socketChannel read返回值代表的意思
- Rails 之微信开发 : OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
- Java 编程下 IO 中的输入流的 read() 方法返回值为什么是 int 值(科普一下吧,某个大侠写的)
- WebApi(五)【接口返回值不困惑:返回值类型详解】
- 安装cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题
- 关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题