В общем, библиотека OpenSSL (C API), кажется, предлагает два способа сделать все: вы можете либо использовать простые системные сокеты, настроенные по своему вкусу, либо вы можете использовать объекты OpenSSL BIO
, которые похожи на потоки.
Однако меня часто смущает дублирование функций. Например, как сделать SSL-соединение неблокирующим? Один из способов - просто получить доступ к базовому файловому дескриптору и установить для него неблокирующий режим с помощью fcntl
. Но есть также функция OpenSSL API с именем BIO_set_nbio
, которая принимает объект BIO*
и устанавливает его в неблокирующий режим.
Итак, как лучше всего настроить неблокирующий сокет SSL? Что произойдет, если вы передадите OpenSSL собственный файловый дескриптор, который уже установлен в неблокирующий режим через fnctl
? Вам по-прежнему нужно специально вызывать BIO_set_nbio
, чтобы сделать объект BIO
неблокирующим?