Open
Description
When connected via TLS, i.e. the socket is wrapped using the ssl_context
and if there is nothing to be read in the loop, it results in:
Traceback (most recent call last):
File "c.py", line 132, in <module>
mqtt_client.loop()
File "/Users/vladimirkotal/Pi/Adafruit_CircuitPython_MiniMQTT/adafruit_minimqtt/adafruit_minimqtt.py", line 955, in loop
rc = self._wait_for_msg(timeout)
File "/Users/vladimirkotal/Pi/Adafruit_CircuitPython_MiniMQTT/adafruit_minimqtt/adafruit_minimqtt.py", line 976, in _wait_for_msg
res = self._sock_exact_recv(1)
File "/Users/vladimirkotal/Pi/Adafruit_CircuitPython_MiniMQTT/adafruit_minimqtt/adafruit_minimqtt.py", line 1077, in _sock_exact_recv
recv_len = self._sock.recv_into(rc, bufsize)
File "/usr/local/Cellar/python@3.9/3.9.13_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1242, in recv_into
return self.read(nbytes, buffer)
File "/usr/local/Cellar/python@3.9/3.9.13_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1100, in read
return self._sslobj.read(len, buffer)
ssl.SSLWantReadError: The operation did not complete (read) (_ssl.c:2633)
In such case, _wait_for_msg()
should return None
, however the ssl exception fires through:
Adafruit_CircuitPython_MiniMQTT/adafruit_minimqtt/adafruit_minimqtt.py
Lines 967 to 972 in 342b8c9
Note that the line numbers do not match because I am using minimqtt code for one of my PRs, however that should not matter.
Trouble is that the ssl.SSLWantReadError
does not seem to be reachable from the ssl context passed to MQTT()
init function. The exception class is based on OSError
, however catching that would be too generic, I think.