Symptom

Two Krill servers on the same LAN, started at different times, may not discover each other until one is restarted. The server that started first never lists the later-starting server as a peer.

Root cause

ServerBeaconSupervisor.startBeaconProcess() sent a single startup beacon (beaconSender.sendSignal()) and then only listened, reacting to incoming beacons from new peers. If Server A started first and its single best-effort UDP multicast beacon was dropped — or arrived before Server B’s socket had joined the multicast group — Server A never heard Server B. Because neither side ever re-announced after the one-shot startup, the silence was permanent until a restart emitted a fresh beacon. The ServerBeaconSupervisor KDoc described beacons as “periodic” but the implementation was one-shot. Same root cause as the client-side bug fixed in docs/lessons/2026-06-18-beacon-reprobe-stuck-search.md.

Fix

Prevention