mirror of
https://github.com/jmcorgan/fips.git
synced 2026-08-10 16:43:12 +00:00
When two peers each auto_connect to the other, each runs both an initiator and a responder NAT-traversal session and binds a separate UDP socket per session. Each side adopts only the first Established event and drops the loser session's socket; when the two sides adopt mismatched sessions, each sends its Noise msg1 to a peer port the peer has already stopped draining, and both handshakes stall. Deterministically keep the session initiated by the smaller NodeAddr, decided on the responder path: decline an incoming offer only when we also have an in-flight outbound initiator for the same peer and our NodeAddr is smaller. The peer's redundant initiator then times out, leaving a single matching socket pair on both ends. Asymmetric (one-sided) auto_connect has no co-active initiator and is never suppressed, so connectivity is preserved; an undecidable NodeAddr falls through to answering. Reuses the NodeAddr tie-breaker convention already used by the cross-connection and rekey dual-init paths. Adds a unit test for the election helper.