From 3b58df2b74ef75f0461b55a35bde7cd7e58047c0 Mon Sep 17 00:00:00 2001 From: Pete Date: Mon, 6 Jan 2025 08:17:09 +0000 Subject: [PATCH] Close the Python sockets when the Websocket closes This allows the client to detect when the connection has been interrupted --- kubernetes/base/stream/ws_client.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kubernetes/base/stream/ws_client.py b/kubernetes/base/stream/ws_client.py index 3c854ea74..10c6c1bcd 100644 --- a/kubernetes/base/stream/ws_client.py +++ b/kubernetes/base/stream/ws_client.py @@ -30,7 +30,7 @@ from six.moves.urllib.parse import urlencode, urlparse, urlunparse from six import StringIO, BytesIO -from websocket import WebSocket, ABNF, enableTrace +from websocket import WebSocket, ABNF, enableTrace, WebSocketConnectionClosedException from base64 import urlsafe_b64decode from requests.utils import should_bypass_proxies @@ -379,7 +379,12 @@ def _proxy(self): if sock == self.websocket: pending = True while pending: - opcode, frame = self.websocket.recv_data_frame(True) + try: + opcode, frame = self.websocket.recv_data_frame(True) + except WebSocketConnectionClosedException: + for port in self.local_ports.values(): + port.python.close() + return if opcode == ABNF.OPCODE_BINARY: if not frame.data: raise RuntimeError("Unexpected frame data size")