У меня есть многопоточное приложение, которое интенсивно использует OpenSSL в C. Оно разработано с мыслью, что все его SSL-соединения должны блокироваться.В частности, блокирование БИО.Все они распределяются по одному входящему порту, как это:
ssl = SSL_new(ctx);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
sock = BIO_new_socket(socket, BIO_CLOSE);
SSL_set_bio(ssl, sock, sock);
Как оказалось, есть несколько небольших частей кодовой базы, где использование неблокирующих BIO было бы лучшим выбором.Небольшие детали, которые выиграют от неблокирующих BIO, не могут знать, какие SSL-соединения будут принадлежать им.Таким образом, они всегда получают блокирующие BIO.
Вопрос в том, можно ли изменить блокирующие BIO, чтобы они были неблокирующими?
Я знаю, что BIO_set_nbio можно использовать длясделать BIO неблокирующим, но документация гласит:
Вызов BIO_set_nbio () должен быть сделан до того, как будет установлено соединение, потому что неблокирующий ввод / вывод устанавливается во время процесса соединения.
Другой возможный вариант, о котором я подумал, - это скопировать BIO и воссоздать его, сохранив при этом все состояние.