2016-09-19 2 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(); 

err2行為はエラーがすべて(= 0)でありませんかのようにしながら、変数errは、上記のコードで有効なエラーを表す場合もあります。

たとえば、私がテストで遭遇したケースです:SSL_readが0バイト(buffer_size = bytes = 0)を読み込もうとしたときに、errにSSL_ERROR_SYSCALLが表示されます。しかし、err2はまだ0になり、実際のエラーはなかったことを示します。 SSL_readはbufに0バイトが書き込まれたことを示すためにこの値を返します。

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

こんにちはを見て、私はこのmanページを読んだが、私はまだあなたが強調しSSL_readのエラー処理を短いコードまたは擬似コードを提供することができますおそらく、わからないんだけど? – Zohar81

関連する問題