Нужно ли обрабатывать SSL_ERROR_WANT_WRITE, когда SSL_read ()? - PullRequest
3 голосов
/ 08 апреля 2011

Я читаю учебник по программированию openssl .

Я не могу разрешить блокировку серверного приложения для какой-либо операции для одного соединения,
, поэтому я будуиспользуйте неблочные розетки.

Поскольку кажется, что ssl handshaking происходит в ssl_accept и ssl_connect,
, и это может быть заблокировано, мне придется установить сокет в неблокированный перед вызовом ssl_accept.

В учебном документе говорится, что мне нужно обработать SSL_ERROR_WANT_WRITE (плюс, конечно, SSL_ERROR_WANT_READ) для SSL_read, потому что повторный обмен SSL может произойти в любое время.
И SSL_ERROR_WANT_READ для SSL_write по той же причине.

Из документа

Мы получим WANT_WRITE, если мы пытаемся выполнить повторный обмен, и мы блокируем запись во время этого повторного обмена.

Нам нужно подождатьна сокете для записи, но перезапустите чтение, когда оно

Я сбит с толку в части "повторного" рукопожатия.
Я не планирую сохранять состояние ssl и повторно использовать его(это называется возобновлением сеанса?) После первого подтверждения связи мне не придется иметь дело с подтверждением связи для того же соединения.

Интересно, мне все еще нужно беспокоиться о WANT_WRITE в SSL_read и наоборот, когда я не собираюсь использовать возобновление сеанса.

Спасибо

1 Ответ

5 голосов
/ 10 апреля 2011

Переназначение может быть инициировано любой стороной в любой точке соединения. На самом деле это не имеет ничего общего с возобновлением сеанса.

Так что да, если вы хотите, чтобы ваше приложение было надежным, вы должны быть готовы обрабатывать как SSL_WANT_WRITE, так и SSL_WANT_READ независимо от того, читаете ли вы в данный момент или пишете.

...