fix: исправить зависание при Ctrl+C

- signal_handler вызывает shutdown() который блокируется
- Убран sys.exit(0) из signal handler
- serve_forever() завершается через KeyboardInterrupt
- finally закрывает сокет корректно
This commit is contained in:
2026-05-20 22:59:19 +03:00
parent 9d8e78fe2a
commit 4e5b961f7b
+11 -11
View File
@@ -40,9 +40,8 @@ def signal_handler(sig, frame):
"""Handle Ctrl+C gracefully.""" """Handle Ctrl+C gracefully."""
print("\n👋 Shutting down...") print("\n👋 Shutting down...")
if httpd: if httpd:
# Use shutdown() to stop serve_forever()
httpd.shutdown() httpd.shutdown()
httpd.server_close()
sys.exit(0)
def main(): def main():
@@ -75,15 +74,16 @@ def main():
╚══════════════════════════════════════════════════════════╝ ╚══════════════════════════════════════════════════════════╝
""") """)
with socketserver.TCPServer((args.host, args.port), CustomHandler) as httpd: httpd = socketserver.TCPServer((args.host, args.port), CustomHandler)
print(f"🚀 Server started on http://{args.host}:{args.port}") print(f"🚀 Server started on http://{args.host}:{args.port}")
try:
httpd.serve_forever() try:
except KeyboardInterrupt: httpd.serve_forever()
pass except KeyboardInterrupt:
finally: pass
print("\n👋 Server stopped") finally:
httpd.server_close() print("\n👋 Server stopped")
httpd.server_close()
if __name__ == "__main__": if __name__ == "__main__":