我最近升级了在Raspberry Pi Zero / w(Raspbian Stretch)上运行的BLE数据包捕获应用程序,以便在将数据包转发到云服务器时使用OpenSSL。云服务器只接收数据包并将它们存储在数据库中,Pi上的应用程序只是将数据包发送到云服务器。所以它是从Pi到云服务器的单向对话。
问题是云服务器会在一段时间不活动后关闭连接。所以它调用SSL_shutdown()
,但在Pi上SSL_RECEIVED_SHUTDOWN
标志永远不会被设置,除非我调用SSL_read()
(或偷看)。
此外,即使在服务器拨打电话后,套接字上的轮询也不会在Pi上显示SSL_ERROR_WANT_READ
。
所以,最重要的是,我不得不经常致电SSL_read()
来抓住关机。这是正常的吗?还有另一种方法更有意义吗?
我使用非阻塞套接字,所以它似乎不会伤害任何东西,但它似乎很好,因为云服务器永远不会发送任何数据(所以那里有's's' s永远不会有任何实际阅读的内容。)
无论如何,我花了几个小时研究和尝试各种方法,但这是我发现让它发挥作用的唯一方法。