Получение OpenSSL "закрыть уведомление" без "SSL_read", есть ли способ? - PullRequest
0 голосов
/ 08 мая 2018

Я недавно обновил приложение для захвата пакетов BLE, работающее на Raspberry Pi Zero / w (Raspbian Stretch), чтобы использовать OpenSSL при пересылке пакетов на облачный сервер. Облачный сервер просто получает пакеты и сохраняет их в БД, приложение на Pi просто отправляет пакеты на облачный сервер. Так что это односторонний разговор от Pi до облачного сервера.

Проблема в том, что облачный сервер отключит соединение после определенного периода бездействия. Поэтому он вызывает SSL_shutdown(), но на Pi флаг SSL_RECEIVED_SHUTDOWN никогда не устанавливается, если я не вызову SSL_read() (или заглянуть).

Кроме того, при опросе сокета * Pi не отображается SSL_ERROR_WANT_READ даже после того, как сервер сделал свой вызов.

Итак, суть в том, что мне приходится постоянно звонить SSL_read(), только чтобы поймать отключение. Это нормально? Есть ли другой подход, который имеет больше смысла?

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

В любом случае, я часами искал и пробовал различные подходы, но я нашел единственный способ заставить его работать.

...