| 239 | server_writer: asyncio.StreamWriter, |
| 240 | ) -> None: |
| 241 | async def _forward( |
| 242 | reader: asyncio.StreamReader, writer: asyncio.StreamWriter |
| 243 | ) -> None: |
| 244 | try: |
| 245 | while True: |
| 246 | data = await reader.read(8192) |
| 247 | if not data: |
| 248 | break |
| 249 | writer.write(data) |
| 250 | await writer.drain() |
| 251 | except ConnectionResetError: |
| 252 | self.logger.debug("Connection reset by peer.") |
| 253 | except Exception as e: |
| 254 | self.logger.error(f"Error forwarding data: {e}", exc_info=True) |
| 255 | finally: |
| 256 | self._safe_close(writer) |
| 257 | |
| 258 | client_to_server = asyncio.create_task(_forward(client_reader, server_writer)) |
| 259 | server_to_client = asyncio.create_task(_forward(server_reader, client_writer)) |