2016-09-19 1349 views
2

请考虑下面这段代码,它显示了从ssl连接读取buff_size字节的尝试。SSL_read解密错误代码

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

看着the man

SSL_ERROR_SYSCALL

Some I/O error occurred. The OpenSSL error queue may contain more information on the error. If the error queue is empty (i.e. ERR_get_error() returns 0), ret can be used to find out more about the error: If ret == 0, an EOF was observed that violates the protocol. If ret == -1, the underlying BIO reported an I/O error (for socket I/O on Unix systems, consult errno for details). Emphasis mine

+0

嗨,我读过这个男人页面,但我仍然不知道也许你可以到强调提供一个短代码或伪代码的错误处理,SSL_read? – Zohar81