diff --git a/src/s5p/server.py b/src/s5p/server.py index 2a28d08..ec20358 100644 --- a/src/s5p/server.py +++ b/src/s5p/server.py @@ -4,6 +4,7 @@ from __future__ import annotations import asyncio import logging +import signal import struct import time @@ -231,5 +232,12 @@ async def serve(config: Config) -> None: else: logger.info(" mode: direct (no chain)") + loop = asyncio.get_running_loop() + stop = loop.create_future() + + for sig in (signal.SIGTERM, signal.SIGINT): + loop.add_signal_handler(sig, lambda s=sig: stop.set_result(s)) + async with srv: - await srv.serve_forever() + sig = await stop + logger.info("received %s, shutting down", signal.Signals(sig).name)