Если вызов SSL_accept не удается, я хочу просто выручить.Как очистить плохое соединение OpenSSL
В настоящее время я вызываю SSL_shutdown, а затем SSL_free, но с момента его реализации у двух клиентов произошли сбои в OpenSSL (при вызове SSL_accept в более позднее время), поэтому я предполагаю, что это не самое лучшее способ очистки.
Документы говорят, что SSL_shutdown используется для правильной очистки, и его, возможно, нужно будет вызывать дважды (хотя, если SSL_accept не удалось, я бы не подумал, что это будет так). SSL_clear - это еще один вариант, но похоже, что это больше связано с сбросом соединения.
SSL_free уменьшает счетчик ссылок и удаляет соединение, если количество ссылок достигает 0. Я знаю, что у моего кода нет ссылок, но может быть «сеанс»?
Есть ли окончательный способ полностью закрыть/выключить/освободить объект SSL с помощью OpenSSL?
Я не могу повторно использовать SSL * после вызова SSL_free. Итак, как только я вызываю SSL_free(), это все, что мне нужно сделать, чтобы очистить его? Независимо от того, какие ошибки или подключения произошли ранее? – DougN
@DougN: Правильно. Обратите внимание, что 'SSL_free()' также освобождает базовые BIOs - может ли это быть источником вашей проблемы? – caf
Я на 99% уверен, что BIO не освобождены. Насколько мне известно, это просто SSL_shutdown, а затем SSL_free. Затем ничего не трогается. Угадайте, я делаю это правильно (но дважды проверю BIO) - надеюсь, что аварии - это просто совпадение ... Спасибо за помощь. – DougN