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:
|
# CPython socket module contains a timeout attribute |
|
if hasattr(self._socket_pool, "timeout"): |
|
try: |
|
res = self._sock_exact_recv(1) |
|
except self._socket_pool.timeout: |
|
return None |
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.
When connected via TLS, i.e. the socket is wrapped using the
ssl_contextand if there is nothing to be read in the loop, it results in:In such case,
_wait_for_msg()should returnNone, 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.SSLWantReadErrordoes not seem to be reachable from the ssl context passed toMQTT()init function. The exception class is based onOSError, however catching that would be too generic, I think.