Во-первых, ваш вопрос не очень ясен.SSL
является (typedef для) структурным типом C, и вы не можете использовать оператор точки для структурного типа в C, только для экземпляра.Даже если предположить, что вы имели в виду «экземпляр SSL
», как это иногда делают люди, в более старых версиях (через 1.0.2) он не имел членов read
и write
, а в версии 1.1.0 он непрозрачен -- вы даже не знаете, каковы его члены.
Во-вторых, есть два разных уровня использования BIO, применимых к библиотеке SSL.Соединение SSL / TLS (представленное объектом SSL
плюс некоторые связанные с ним связанные вещи, такие как сеанс) всегда использует два BIO для отправки и получения данных протокола, соответственно, включая данные протокола, содержащие данные приложения, которые вы отправляете с помощьюSSL_write
и получение с SSL_read
, а также рукопожатие SSL / TLS, которое обрабатывается в библиотеке.Как и Штеффен описывает , они оба обычно устанавливаются на BIO сокета, который отправляет и получает от соответствующего процесса удаленного хоста, но вместо этого они могут быть установлены на BIO, которые делают что-то другое между ними, илидаже вместо.(Этот нормальный случай автоматически создается с помощью SSL_set_{,r,w}fd
, что следует отметить, что в Windows фактически используется дескриптор сокета, но не любой другой дескриптор файла; только в Unix дескрипторы сокетов частично взаимозаменяемы с файловыми дескрипторами.)
Отдельно само соединение SSL / TLS можно «обернуть» в ssl-BIO.Это позволяет приложению обрабатывать SSL / TLS-соединение, используя в основном те же вызовы API, что и обычное TCP-соединение (с использованием BIO-сокета) или локальный файл, а также предоставленные «фильтрующие» BIO, такие как BEST-дайджест (md).или BIO кодирования / декодирования base64, и любые дополнительные BIO, которые вы добавляете.Это касается веб-страницы IBM, на которую вы ссылаетесь (для клиента, а не для сервера).Это похоже на философию Unix «все (в основном) файл», где, например, служебная программа grep
, просто вызывая read
на fd 0, может искать данные из файла, терминала, канала издругая программа или (если она запущена в inetd или подобном) из удаленной системы, использующей TCP (но не SSL / TLS, потому что этого нет в ОС).Я не сталкивался со многими случаями, когда особенно полезно иметь возможность легко обмениваться данными SSL / TLS с каким-либо другим типом источника / приемника, но OpenSSL предоставляет такую возможность.