Как управлять очередью ошибок в openssl (SSL_get_error и ERR_get_error)

В OpenSSl страницы руководства для большинства вызовов SSL_ * указывают на ошибку, возвращая значение <= 0, и предлагают вызвать SSL_get_error (), чтобы получить расширенную ошибку.

Но в справочных страницах для этих вызовов, а также для других вызовов библиотеки OpenSSL, есть неясные ссылки на использование «очереди ошибок» в OpenSSL - так обстоит дело в справочной странице дляSSL_get_error:

   The current thread's error queue must be empty before the TLS/SSL I/O
   operation is attempted, or  SSL_get_error() will not work reliably.

И на той же самой man-странице описание для SSL_ERROR_SSL гласит:

   SSL_ERROR_SSL
       A failure in the SSL library occurred, usually a protocol error.
       The OpenSSL error queue contains more information on the error.

Этот тип подразумевает, что в очереди ошибок есть что-то, что стоит прочитать. А невозможность его чтения делает последующий вызов SSL_get_error ненадежным. Предположительно, призыв сделать этоERR_get_error.

Я планирую использовать неблокирующие сокеты в моем коде. Поэтому важно, чтобы я достоверно обнаружил, когда в качестве условия ошибки выступает SSL_ERROR_WANT_READ или SSL_ERROR_WANT_WRITE, чтобы я мог перевести сокет в правильный режим опроса.

Итак, мои вопросы таковы:

SSL_get_error () неявно вызывает ERR_get_error () для меня? Или мне нужно использовать оба?

Должен ли я звонитьERR_clear_error до каждого вызова библиотеки OpenSSL?

Возможно ли, что после завершения вызова библиотеки OpenSSL в очереди может появиться более одной ошибки? Следовательно, существуют ли обстоятельства, когда первая ошибка в очереди более важна, чем последняя ошибка?

Ответы на вопрос(1)

Ваш ответ на вопрос