Я недавно обновил приложение для захвата пакетов 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()
, только чтобы поймать отключение. Это нормально? Есть ли другой подход, который имеет больше смысла?
Я использую неблокирующие сокеты, так что это, кажется, ничего не ранит, но это просто кажется ненадежным, поскольку облачный сервер никогда не будет отправлять какие-либо данные (поэтому на самом деле никогда не будет ничего, что можно было бы прочитать ).
В любом случае, я часами искал и пробовал различные подходы, но я нашел единственный способ заставить его работать.