From 7288d93741d0885b26c92f561e524e6bd887e1e3 Mon Sep 17 00:00:00 2001 From: Danny Date: Sun, 29 Mar 2026 18:58:16 +0200 Subject: [PATCH] =?UTF-8?q?fix(start):=20force=20http2=20protocol=20and=20?= =?UTF-8?q?drain=20cloudflared=20output=20=F0=9F=90=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QUIC tunnels consistently returned 1033 errors. Forcing http2 fixes it. Added a daemon thread to drain cloudflared's stdout pipe to prevent buffer-full blocking that would kill the tunnel. --- start.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/start.py b/start.py index 37cc268..2f6352b 100644 --- a/start.py +++ b/start.py @@ -12,6 +12,7 @@ import re import signal import subprocess import sys +import threading import time import pathlib @@ -62,7 +63,7 @@ def start_server(port: int, bot_token: str) -> subprocess.Popen: def start_tunnel(port: int) -> tuple[subprocess.Popen, str]: print(f" Starting tunnel to port {port}...") proc = subprocess.Popen( - ["cloudflared", "tunnel", "--url", f"http://localhost:{port}"], + ["cloudflared", "tunnel", "--url", f"http://localhost:{port}", "--protocol", "http2"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, @@ -95,6 +96,13 @@ def start_tunnel(port: int) -> tuple[subprocess.Popen, str]: print(" Make sure cloudflared is installed: cloudflared tunnel --url http://localhost:8080\n") sys.exit(1) + # Keep draining cloudflared output so its pipe buffer doesn't fill up + # (which would block the process and kill the tunnel) + def _drain(): + for line in proc.stdout: + pass + threading.Thread(target=_drain, daemon=True).start() + return proc, url