diff --git a/satellite/satellite.py b/satellite/satellite.py index ee40f5c..3aba7dd 100644 --- a/satellite/satellite.py +++ b/satellite/satellite.py @@ -469,18 +469,28 @@ def _discover_mdns(timeout: float) -> list[dict]: pass zc = None + browsers = [] try: zc = Zeroconf() listener = _Listener() for t in MDNS_TYPES: try: - ServiceBrowser(zc, t, listener) + browsers.append(ServiceBrowser(zc, t, listener)) except Exception: pass time.sleep(timeout) except Exception as exc: logger.warning("mDNS-Sweep-Fehler: %s", exc) finally: + # Jeder ServiceBrowser ist ein eigener Thread, den zc.close() NICHT + # beendet — ohne cancel() blieben pro Scan 14 Threads liegen. Nach + # ~5 Tagen war das Thread-Limit des Containers voll (18.841), danach + # scheiterte jeder Scan mit "[Errno 11] Resource temporarily unavailable". + for b in browsers: + try: + b.cancel() + except Exception: + pass try: if zc: zc.close()