Skip to content
This repository was archived by the owner on Feb 11, 2026. It is now read-only.

Commit 9192952

Browse files
committed
Опять фикс сокетов
1 parent 7fc7b27 commit 9192952

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

src/pymax/mixins/socket.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@
4040
class 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:

0 commit comments

Comments
 (0)