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]}"