OpenSSL BIO и SSL_read - PullRequest
       7

OpenSSL BIO и SSL_read

0 голосов
/ 22 октября 2018

В нашем клиент-серверном приложении мы используем протокол TLS / TCP для обмена сообщениями.Через некоторое время между приложениями происходит смещение сообщений (сообщения отправляются и принимаются в правильном порядке в начале), то есть клиент отправляет 1000-е сообщение на сервер и получает ответ 999-го сообщения.Подозреваемый находится на стороне клиента, в котором мы реализуем уровни TCP и TLS независимо, т.е. не привязываем сокет TCP к объекту SSL (через SSL_set_fd ()), а используем BIO.Когда клиентское приложение получает ответ от сервера (почти уверен, что сообщение обрабатывается на сервере правильно, клиентский уровень TCP получает сообщение правильно и т. Д.), Сообщение пересылается на уровень SSL.Сначала клиентское приложение записывает сообщение в BIO:

BIO_write (readBio, data, length);

Затем в другой функции уровня SSL сообщение читается с использованием SSL_read ():

res = SSL_read (ssl, buffer, length);

Операция чтения выполнена успешно, но моя цель - проверить, есть ли еще записи для чтения в BIO.Я решил использовать метод SSL_pending (), но кажется, что этот должен использоваться, чтобы проверить, есть ли еще байты в той же записи.Если наши подозреваемые верны, я хотел бы проверить, есть ли в BIO еще одна запись, чтобы все сообщения обрабатывались без каких-либо задержек.Можете ли вы помочь мне в этой теме?Заранее спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

SSL_pending сообщает, есть ли данные из текущей расшифрованной записи SSL, которые еще не прочитаны SSL_read. BIO_pending может использоваться, чтобы выяснить, есть ли уже данные в BIO, которые не обрабатываются уровнем SSL.Чтобы узнать, являются ли непрочитанные данные на уровне сокета, используйте MSG_PEEK .

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