SSL_read解密错误代码

时间:2016-09-19 08:32:12

标签: c ssl openssl

考虑以下代码,显示尝试从ssl连接中读取buff_size个字节。

int bytes = SSL_read(m_ssl, buf, buff_size);
int err = SSL_get_error(m_ssl, bytes);
int err2 = ERR_get_error();

在某些情况下,变量err表示上述代码中的有效错误,而err2则表现为根本没有错误(= 0)。

例如,以下是我在测试中遇到的情况:当SSL_read尝试读取0个字节(buffer_size = bytes = 0)时,err将显示SSL_ERROR_SYSCALL。但是err2仍然为0,表示没有真正的错误。 SSL_read返回此值仅表示0字节已写入buf。

还有更多这样的特殊情况err指出某些内容可能有问题,但读取结果没有读取错误?

1 个答案:

答案 0 :(得分:0)

查看the man

  

<强> SSL_ERROR_SYSCALL

     

发生了一些I / O错误。 OpenSSL错误队列 可能 包含有关错误的更多信息。 如果错误队列为空(即ERR_get_error()返回0),则可以使用ret查找有关错误的更多信息:如果ret == 0,则观察到违反协议的EOF。如果ret == -1,则底层BIO报告I / O错误(对于Unix系统上的套接字I / O,请参阅errno以获取详细信息)。   强调我的