考虑以下代码,显示尝试从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
指出某些内容可能有问题,但读取结果没有读取错误?
答案 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以获取详细信息)。 强调我的