diff --git a/selfdrive/athena/athenad.py b/selfdrive/athena/athenad.py index 989e284e74..505a9ae28b 100755 --- a/selfdrive/athena/athenad.py +++ b/selfdrive/athena/athenad.py @@ -657,10 +657,12 @@ def stat_handler(end_event: threading.Event) -> None: def ws_proxy_recv(ws: WebSocket, local_sock: socket.socket, ssock: socket.socket, end_event: threading.Event, global_end_event: threading.Event) -> None: while not (end_event.is_set() or global_end_event.is_set()): try: - data = ws.recv() - if isinstance(data, str): - data = data.encode("utf-8") - local_sock.sendall(data) + r = select.select((ws.sock,), (), (), 30) + if r[0]: + data = ws.recv() + if isinstance(data, str): + data = data.encode("utf-8") + local_sock.sendall(data) except WebSocketTimeoutException: pass except Exception: @@ -670,6 +672,7 @@ def ws_proxy_recv(ws: WebSocket, local_sock: socket.socket, ssock: socket.socket cloudlog.debug("athena.ws_proxy_recv closing sockets") ssock.close() local_sock.close() + ws.close() cloudlog.debug("athena.ws_proxy_recv done closing sockets") end_event.set() diff --git a/selfdrive/athena/tests/helpers.py b/selfdrive/athena/tests/helpers.py index 3dd98f02c9..322e9d81dd 100644 --- a/selfdrive/athena/tests/helpers.py +++ b/selfdrive/athena/tests/helpers.py @@ -43,6 +43,8 @@ class MockApi(): class MockWebsocket(): + sock = socket.socket() + def __init__(self, recv_queue, send_queue): self.recv_queue = recv_queue self.send_queue = send_queue @@ -56,6 +58,9 @@ class MockWebsocket(): def send(self, data, opcode): self.send_queue.put_nowait((data, opcode)) + def close(self): + pass + class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler): def do_PUT(self):