diff --git a/server/stemserve.py b/server/stemserve.py index e325dc5..95bade4 100644 --- a/server/stemserve.py +++ b/server/stemserve.py @@ -490,6 +490,15 @@ def _format(query): return "opus", min(OPUS_RATES, key=lambda r: abs(r - br)) +class QuietServer(ThreadingHTTPServer): + """Browsers and proxies drop connections all the time; don't print a traceback for each.""" + + def handle_error(self, request, client_address): + if isinstance(sys.exc_info()[1], (ConnectionError, TimeoutError)): + return + super().handle_error(request, client_address) + + def main(): if not os.path.isdir(STEMS_DIR): sys.exit(f"STEMS_DIR not found: {STEMS_DIR}") @@ -497,7 +506,7 @@ def main(): INDEX.refresh() log(f"stemserve on :{PORT}, {INDEX.count} tracks in {STEMS_DIR}, ffmpeg={'yes' if FFMPEG else 'no'}, " f"token={'on' if TOKEN else 'off'}") - server = ThreadingHTTPServer(("0.0.0.0", PORT), Handler) + server = QuietServer(("0.0.0.0", PORT), Handler) server.daemon_threads = True # As PID 1 in a container, SIGTERM is ignored unless handled; docker stop would hang. signal.signal(signal.SIGTERM, lambda *_: sys.exit(0))