From ea3a43eebf552013152e669f0c86ca101abbbf8e Mon Sep 17 00:00:00 2001 From: wycfirezdog Date: Fri, 21 Aug 2026 02:14:36 +0530 Subject: [PATCH] fix(serve): catch BrokenPipeError/ConnectionResetError in _json_response Fixes #64: serve.py crashed with BrokenPipeError when an HTTP client disconnected before the server finished writing the response. The _json_response() method wrote to self.wfile with no exception handling. Changes: - Wrap entire response-writing block in try/except - Catch (BrokenPipeError, ConnectionResetError) silently - Client disconnects no longer produce noisy tracebacks --- src/tracer/runtime/serve.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/tracer/runtime/serve.py b/src/tracer/runtime/serve.py index 7e0bfdb..9758824 100644 --- a/src/tracer/runtime/serve.py +++ b/src/tracer/runtime/serve.py @@ -94,12 +94,15 @@ def _read_body(self) -> dict: def _json_response(self, code: int, data: dict): body = json.dumps(data, default=str).encode("utf-8") - self.send_response(code) - self.send_header("Content-Type", "application/json") - self.send_header("Content-Length", str(len(body))) - self.send_header("Access-Control-Allow-Origin", "*") - self.end_headers() - self.wfile.write(body) + try: + self.send_response(code) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.send_header("Access-Control-Allow-Origin", "*") + self.end_headers() + self.wfile.write(body) + except (BrokenPipeError, ConnectionResetError): + pass # client disconnected def log_message(self, fmt, *args): # Quiet logging - only errors