This repository was archived by the owner on Feb 11, 2026. It is now read-only.
File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 4040class SocketMixin (BaseTransport ):
4141 def _close_socket_safely (self ) -> None :
4242 if self ._socket is not None :
43+ sock = self ._socket
44+ self ._socket = None # Nullify reference first to prevent double-closes
4345 with contextlib .suppress (ssl .SSLError , Exception ):
44- self . _socket .close ()
46+ sock .close ()
4547
4648 @property
4749 def sock (self ) -> socket .socket :
@@ -302,10 +304,6 @@ async def _parse_header(
302304 len (header ) if header else 0 ,
303305 )
304306 self .is_connected = False
305- try :
306- sock .close ()
307- except Exception :
308- pass
309307 raise ConnectionResetError ("Socket closed while reading header" )
310308
311309 return header
@@ -358,13 +356,17 @@ async def _recv_loop(self) -> None:
358356 self .logger .warning ("Recv loop started without socket instance" )
359357 return
360358
361- sock = self ._socket
362359 loop = asyncio .get_running_loop ()
363360 consecutive_errors = 0
364361 max_consecutive_errors = 3
365362
366363 while True :
367364 try :
365+ sock = self ._socket # Get fresh reference on each iteration
366+ if sock is None :
367+ self .logger .warning ("Socket became None, exiting recv loop" )
368+ break
369+
368370 header = await self ._parse_header (loop , sock )
369371
370372 if not header :
You can’t perform that action at this time.
0 commit comments