From df0d00abf4f34c780d619c9b6f52268989d47ada Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Tue, 12 Aug 2025 10:29:56 -0400 Subject: [PATCH] Translate CRE's due to socket-close to tpt-closed Just like in the BRE case (for UDS) it seems when a peer closes the (UDS?) socket `trio` instead raises a `ClosedResourceError` which we now catch and re-raise as a `TransportClosed`. This again results in `tpt.send()` calls from the rpc-runtime **not** raising when it's known that the IPC channel is disconnected. --- tractor/ipc/_transport.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tractor/ipc/_transport.py b/tractor/ipc/_transport.py index ad2a0e8e..5a484b36 100644 --- a/tractor/ipc/_transport.py +++ b/tractor/ipc/_transport.py @@ -430,6 +430,7 @@ class MsgpackTransport(MsgTransport): return await self.stream.send_all(size + bytes_data) except ( trio.BrokenResourceError, + trio.ClosedResourceError, ) as _re: trans_err = _re tpt_name: str = f'{type(self).__name__!r}' @@ -458,6 +459,22 @@ class MsgpackTransport(MsgTransport): ) raise tpt_closed from trans_err + case trio.ClosedResourceError() if ( + 'this socket was already closed' + in + trans_err.args[0] + ): + tpt_closed = TransportClosed.from_src_exc( + message=( + f'{tpt_name} already closed by peer\n' + ), + body=f'{self}\n', + src_exc=trans_err, + raise_on_report=True, + loglevel='transport', + ) + raise tpt_closed from trans_err + # unless the disconnect condition falls under "a # normal operation breakage" we usualy console warn # about it.