Describe the bug
When announce_timeout is enabled, the timeout scan stops prematurely and does not reliably check all sources and universes. Due to an inverted loop-break condition, only the first source in the map may be checked. Even after correcting this condition, the function removes and reports only a single timed-out universe per call, leaving other expired universes and sources unchecked until future calls.
Expected behaviour
All sources and universes should be scanned for timeouts on each invocation. Any universe whose last_recv.elapsed() is greater than or equal to the configured timeout (per ANSI E1.31-2018 data loss and discovery timeout rules) should be removed. If timeout announcements are enabled, the implementation should either report all detected timeouts or clearly document and consistently enforce a “one timeout per call” policy while still ensuring all expired state is eventually cleaned up.