Использование OpenSSL без потоков - PullRequest
0 голосов
/ 05 ноября 2010

Всякий раз, когда я захожу в OpenSSL на Windows или Mac, я всегда делаю свои собственные био-модули памяти и связываю их с реализацией сокетов на основе сообщений платформ (асинхронный, не блокирующий). (WSAAsyncВыбрать в Windows: CFSocket в Mac)

Безопасное программирование с помощью API OpenSSL , размещенное на ibm.com, кажется лучшим справочником по реализации OpenSSL - но оно реализует очень простое блокирующее соединение.

Существует ли стандартный способ установки и использования OpenSSL с неблокирующими сокетами - такой, что вызовы SSL_read не будут блокироваться, если, например, нет данных?

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

SSL_read() (и другие функции SSL) работают нормально, если базовый сокет установлен неблокирующим.Если данных недостаточно, возвращается значение меньше нуля;SSL_get_error(), вызванный для возвращаемого значения, вернет SSL_ERROR_WANT_READ или SSL_ERROR_WANT_WRITE, указывая, что ожидает SSL.

0 голосов
/ 07 ноября 2010

Использование BIO_set_nbio с BIO_new_socket или BIO_new_connect/accept, вероятно, требует меньше кода, чем создание БИО памяти. Не уверен, что есть что-то более стандартное, чем это. Документы объясняют это более подробно:

http://www.openssl.org/docs/crypto/BIO_s_connect.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...