Почему операции сокета C++ Thrift TLS выдают исключение с несколькими кодами ошибок openssl?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему операции сокета C++ Thrift TLS выдают исключение с несколькими кодами ошибок openssl?

Сообщение Anonymous »

Для обмена данными мы используем TLS-сокет Thrift C++. Openssl построен с опцией no-err. Мы обертываем каждый фрагмент кода, вызывающий бережливый RPC, с помощью try-catch и регистрируем сообщение об исключении. На этапе разработки мы видели исключения, выдаваемые Thrift, которые содержали в сообщении только единственную ошибку openssl, например:

Код: Выделить всё

SSL_CTX_new: SSL error # 168558848
SSL_connect: SSL error # 167772294 (SSL_error_code = 1)
Но после массового развертывания мы заметили некоторые исключения, которые содержат несколько ошибок OpenSSL в сообщении, например:

Код: Выделить всё

SSL_CTX_new: SSL error # 50856204; SSL error # 478150863; SSL error # 301989996; SSL error # 50856204; SSL error # 478150863; SSL error # 301989996; SSL error # 168558848
SSL_connect: SSL error # 33554570; SSL error # 33554546; SSL error # 478674948; SSL error # 109576198; SSL error # 167772294 (SSL_error_code = 1)
Изучив код Thrift, мы обнаружили, что эта функция используется для создания сообщения об исключении:

Код: Выделить всё

void buildErrors(string& errors, int errno_copy, int sslerrno) {
unsigned long errorCode;
char message[256];

errors.reserve(512);
while ((errorCode = ERR_get_error()) != 0) {
if (!errors.empty()) {
errors += "; ";
}
const char* reason = ERR_reason_error_string(errorCode);
if (reason == NULL) {
THRIFT_SNPRINTF(message, sizeof(message) - 1, "SSL error # %lu", errorCode);
reason = message;
}
errors += reason;
}
// ...
}
Разве код Thrift не выбрасывается немедленно, если возникает ошибка openssl? Как можно было бы поставить несколько ошибок в очередь для потока выполнения?

Подробнее здесь: https://stackoverflow.com/questions/791 ... openssl-er
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»