if all 10 reseed URLs fail during NetDb::Start (DNS timeout, TLS error, server down, whatever), ReseedFromServers returns 0 and the node sits with 0 routers forever. no timer, no periodic re-check, no backoff retry.
same outcome as #2372 but different cause — #2372 was one bad server poisoning the count. this is all servers genuinely failing.
Reseed: 15 certificates loaded
Reseed: Downloading SU3 from https://...
Reseed: failed to download from ...
[... 9 more failures]
NetDb: 0 routers loaded (0 floodfils)
Transports: Can't find routers for peer test IPv4
Tunnels: Can't create outbound tunnel, no peers available
[repeats forever, never reseeds again]
hit this on cold-start nodes when DNS was slow to come up. i2pd starts before the system resolver is fully ready, all 10 picks fail in the first few seconds, and that's it.
NetDb::Run has no "if router count is still 0, try reseeding again" path. Reseed() is only called from Start().
proposal: if netDb router count is 0 after the initial reseed, retry with backoff (say 30s, 60s, 120s, ..., capped at ~30min). once any retry succeeds, stop. if the user restarts i2pd, that's also fine, but an embedded/daemon deployment shouldn't need manual intervention for a transient bootstrap failure.
if all 10 reseed URLs fail during NetDb::Start (DNS timeout, TLS error, server down, whatever), ReseedFromServers returns 0 and the node sits with 0 routers forever. no timer, no periodic re-check, no backoff retry.
same outcome as #2372 but different cause — #2372 was one bad server poisoning the count. this is all servers genuinely failing.
hit this on cold-start nodes when DNS was slow to come up. i2pd starts before the system resolver is fully ready, all 10 picks fail in the first few seconds, and that's it.
NetDb::Run has no "if router count is still 0, try reseeding again" path. Reseed() is only called from Start().
proposal: if netDb router count is 0 after the initial reseed, retry with backoff (say 30s, 60s, 120s, ..., capped at ~30min). once any retry succeeds, stop. if the user restarts i2pd, that's also fine, but an embedded/daemon deployment shouldn't need manual intervention for a transient bootstrap failure.