You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think the behavior of recv(timeout=0) for the Thread-based Server is unclear.
Due to the design of my application, I can't use the "for message in websocket" and have to resort to an update() function that I call frequently to check if messages were received:
def update(self) -> None:
"""
Check for received data with proper handling of timeouts and connection closure.
"""
while True:
try:
# Attempt to receive data with a timeout
data_rx = self.ws_client.recv(timeout=0)
except TimeoutError:
# No data received within the timeout period
break
except websockets.exceptions.ConnectionClosed as e:
# Handle connection closure
Log(f"Connection closed: {e}")
self._is_connected = False
break
except Exception as e:
# Handle any other exceptions
Log(f"Error occurred: {e}")
self._is_connected = False
break
# If no data received, exit the loop
if data_rx is None:
break
self.log(f"RX: {data_rx}")
I was expecting when I set timeout=0 that only when a message was received I get it otherwise TimeoutError is raised so it's not blocking.
the behavior I'm getting is that with very low values like timeout=0.001 (1ms) it works, but with 0 I don't receive any messages.
Have I understood timeout=0 incorrectly? In the documentation it says:
"Set timeout to 0 to check if a message was already received." see
The text was updated successfully, but these errors were encountered:
I think the behavior of recv(timeout=0) for the Thread-based Server is unclear.
Due to the design of my application, I can't use the "for message in websocket" and have to resort to an update() function that I call frequently to check if messages were received:
I was expecting when I set timeout=0 that only when a message was received I get it otherwise TimeoutError is raised so it's not blocking.
the behavior I'm getting is that with very low values like timeout=0.001 (1ms) it works, but with 0 I don't receive any messages.
Have I understood timeout=0 incorrectly? In the documentation it says:
"Set timeout to 0 to check if a message was already received." see
The text was updated successfully, but these errors were encountered: