Skip to content

Commit ea3a43e

Browse files
committed
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
1 parent 813821e commit ea3a43e

1 file changed

Lines changed: 9 additions & 6 deletions

File tree

‎src/tracer/runtime/serve.py‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,15 @@ def _read_body(self) -> dict:
9494

9595
def _json_response(self, code: int, data: dict):
9696
body = json.dumps(data, default=str).encode("utf-8")
97-
self.send_response(code)
98-
self.send_header("Content-Type", "application/json")
99-
self.send_header("Content-Length", str(len(body)))
100-
self.send_header("Access-Control-Allow-Origin", "*")
101-
self.end_headers()
102-
self.wfile.write(body)
97+
try:
98+
self.send_response(code)
99+
self.send_header("Content-Type", "application/json")
100+
self.send_header("Content-Length", str(len(body)))
101+
self.send_header("Access-Control-Allow-Origin", "*")
102+
self.end_headers()
103+
self.wfile.write(body)
104+
except (BrokenPipeError, ConnectionResetError):
105+
pass # client disconnected
103106

104107
def log_message(self, fmt, *args):
105108
# Quiet logging - only errors

0 commit comments

Comments
 (0)