From 24ae29b0d72ba7e70cc00a25492e0cf20fbadaa6 Mon Sep 17 00:00:00 2001 From: nicoboy Date: Wed, 1 Jul 2026 16:56:20 +0200 Subject: [PATCH] fix: socket sideband UDP 5602 en dual-stack IPv4+IPv6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le socket AF_INET seul ne recevait pas les stats Pi Zero envoyées en IPv6 via Mycelium. Passage en AF_INET6 + IPV6_V6ONLY=0 pour accepter les deux familles sur un seul socket (Freebox IPv4 en dev, Mycelium IPv6 en prod). --- receive_cam.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/receive_cam.py b/receive_cam.py index 7ec1527..52c463c 100644 --- a/receive_cam.py +++ b/receive_cam.py @@ -63,10 +63,13 @@ _pi_stats: dict | None = None def sideband_loop() -> None: """Écoute UDP 5602, stocke le dernier JSON Pi Zero dans _pi_stats.""" global _pi_stats - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + # AF_INET6 + V6ONLY=0 : socket dual-stack qui accepte l'IPv4 (Freebox, dev) + # et l'IPv6 (Mycelium, prod) sur le même port sans dupliquer le socket. + sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) sock.settimeout(1.0) - sock.bind(("0.0.0.0", SIDEBAND_PORT)) + sock.bind(("::", SIDEBAND_PORT)) print(f"[SIDEBAND] Écoute UDP sur port {SIDEBAND_PORT}") while _running: try: