Gogs 3 päivää sitten
vanhempi
commit
17669cd8c9
2 muutettua tiedostoa jossa 16 lisäystä ja 5 poistoa
  1. 5 2
      socks_edge.py
  2. 11 3
      transparent_edge.py

+ 5 - 2
socks_edge.py

@@ -61,7 +61,11 @@ class RelayLink:
     async def send(self, frame: Frame) -> None:
         if self.closed:
             raise ConnectionError(f"relay closed: {self.node.name}")
-        await write_frame(self.writer, frame)
+        try:
+            await write_frame(self.writer, frame)
+        except (BrokenPipeError, ConnectionResetError, RuntimeError, OSError, asyncio.CancelledError) as exc:
+            await self.close()
+            raise ConnectionError(f"relay closed: {self.node.name}") from exc
 
     async def close(self) -> None:
         if self.closed:
@@ -297,7 +301,6 @@ class UdpAssociateServer(asyncio.DatagramProtocol):
             flow.duplicate_responses += 1
         if flow.winner_name == source_name:
             self.transport.sendto(packet, self.client_addr)
-        self._log_udp_summary()
 
     def set_flow_candidates(self, flow: UdpFlowState, candidate_names: tuple[str, ...]) -> None:
         if not flow.candidate_names:

+ 11 - 3
transparent_edge.py

@@ -119,8 +119,12 @@ class DirectTcpPath(BasePath):
     async def send(self, data: bytes) -> None:
         if self.closed or self.writer is None:
             return
-        self.writer.write(data)
-        await self.writer.drain()
+        try:
+            self.writer.write(data)
+            await self.writer.drain()
+        except (BrokenPipeError, ConnectionResetError, RuntimeError, OSError, asyncio.CancelledError) as exc:
+            await self.close()
+            raise ConnectionError("relay closed") from exc
 
     async def close(self) -> None:
         if self.closed:
@@ -403,7 +407,11 @@ class RelayUdpPath(BasePath):
             return
         meta = encode_json({"host": self.target.host, "port": self.target.port, "family": self.target.family})
         payload = meta + data
-        await self.connection.send(Frame(UDP_SEND, self.session_id, self.stream_id, 0, len(meta), payload))
+        try:
+            await self.connection.send(Frame(UDP_SEND, self.session_id, self.stream_id, 0, len(meta), payload))
+        except Exception:
+            self.closed = True
+            raise
 
     async def close(self) -> None:
         if self.closed: