From 87fa9c954f0530dfc49e02afca58f0a85bfcf21d Mon Sep 17 00:00:00 2001 From: Brian Harrison Date: Fri, 10 Apr 2026 01:19:36 -0400 Subject: [PATCH] fix: make Ctrl-C work on Windows by setting accept() timeout socket.accept() on Windows blocks indefinitely and ignores KeyboardInterrupt. Setting a 1-second timeout on the server socket causes the accept loop to wake up every second and re-check, so Ctrl-C is handled within ~1 second. Co-Authored-By: Claude Sonnet 4.6 --- bridges/ach_server.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bridges/ach_server.py b/bridges/ach_server.py index 012db05..235c306 100644 --- a/bridges/ach_server.py +++ b/bridges/ach_server.py @@ -376,6 +376,9 @@ def serve(args: argparse.Namespace) -> None: server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_sock.bind(("0.0.0.0", args.port)) server_sock.listen(5) + # Wake up every second so Ctrl-C is handled promptly on Windows. + # Without this, accept() blocks indefinitely and ignores KeyboardInterrupt. + server_sock.settimeout(1.0) max_ev = args.max_events print(f"\n{'='*60}") @@ -399,6 +402,9 @@ def serve(args: argparse.Namespace) -> None: while True: try: client_sock, addr = server_sock.accept() + except socket.timeout: + continue # no connection this second; loop back and check for Ctrl-C + try: peer_ip = addr[0] peer = f"{addr[0]}:{addr[1]}"