Skip to content

Commit

Permalink
Correctly mark connection as broken on SSL error and don't crash loop…
Browse files Browse the repository at this point in the history
…_forever
  • Loading branch information
PierreF committed Jan 20, 2024
1 parent 4207e5e commit 5d8451a
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
2 changes: 2 additions & 0 deletions ChangeLog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ v2.0.0 - 2023-xx-xx
and loop_start/loop_forever isn't used. Closes #525.
- Fix wait_for_publish that could hang with QoS == 0 message on reconnection
or publish during connection. Closes #549.
- Correctly mark connection as broken on SSL error and don't crash loop_forever.
Closes #750.


v1.6.1 - 2021-10-21
Expand Down
22 changes: 11 additions & 11 deletions src/paho/mqtt/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ class _OutPacket(TypedDict):
_socket = socket


class WebsocketConnectionError(ValueError):
class WebsocketConnectionError(ConnectionError):
pass


Expand Down Expand Up @@ -1909,7 +1909,7 @@ def loop_forever(
if self._state == mqtt_cs_connect_async:
try:
self.reconnect()
except (OSError, WebsocketConnectionError):
except OSError:
self._handle_on_connect_fail()
if not retry_first_connection:
raise
Expand Down Expand Up @@ -1950,7 +1950,7 @@ def should_exit() -> bool:
else:
try:
self.reconnect()
except (OSError, WebsocketConnectionError):
except OSError:
self._handle_on_connect_fail()
self._easy_log(
MQTT_LOG_DEBUG, "Connection failed, retrying")
Expand Down Expand Up @@ -2617,14 +2617,14 @@ def _packet_read(self) -> MQTTErrorCode:
command = self._sock_recv(1)
except BlockingIOError:
return MQTTErrorCode.MQTT_ERR_AGAIN
except ConnectionError as err:
self._easy_log(
MQTT_LOG_ERR, 'failed to receive on socket: %s', err)
return MQTTErrorCode.MQTT_ERR_CONN_LOST
except TimeoutError as err:
self._easy_log(
MQTT_LOG_ERR, 'timeout on socket: %s', err)
return MQTTErrorCode.MQTT_ERR_CONN_LOST
except OSError as err:
self._easy_log(
MQTT_LOG_ERR, 'failed to receive on socket: %s', err)
return MQTTErrorCode.MQTT_ERR_CONN_LOST
else:
if len(command) == 0:
return MQTTErrorCode.MQTT_ERR_CONN_LOST
Expand All @@ -2639,7 +2639,7 @@ def _packet_read(self) -> MQTTErrorCode:
byte = self._sock_recv(1)
except BlockingIOError:
return MQTTErrorCode.MQTT_ERR_AGAIN
except ConnectionError as err:
except OSError as err:
self._easy_log(
MQTT_LOG_ERR, 'failed to receive on socket: %s', err)
return MQTTErrorCode.MQTT_ERR_CONN_LOST
Expand Down Expand Up @@ -2669,7 +2669,7 @@ def _packet_read(self) -> MQTTErrorCode:
data = self._sock_recv(self._in_packet['to_process'])
except BlockingIOError:
return MQTTErrorCode.MQTT_ERR_AGAIN
except ConnectionError as err:
except OSError as err:
self._easy_log(
MQTT_LOG_ERR, 'failed to receive on socket: %s', err)
return MQTTErrorCode.MQTT_ERR_CONN_LOST
Expand Down Expand Up @@ -2720,7 +2720,7 @@ def _packet_write(self) -> MQTTErrorCode:
except BlockingIOError:
self._out_packet.appendleft(packet)
return MQTTErrorCode.MQTT_ERR_AGAIN
except ConnectionError as err:
except OSError as err:
self._out_packet.appendleft(packet)
self._easy_log(
MQTT_LOG_ERR, 'failed to receive on socket: %s', err)
Expand Down Expand Up @@ -4313,7 +4313,7 @@ def _recv_impl(self, length: int) -> bytes:
else:
raise BlockingIOError

except ConnectionError:
except OSError:
self.connected = False
return b''

Expand Down

0 comments on commit 5d8451a

Please sign in to comment.