Skip to content

Release 1.3.2#488

Merged
StefanBratanov merged 4 commits into
libp2p:masterfrom
StefanBratanov:1.3.2
Jun 10, 2026
Merged

Release 1.3.2#488
StefanBratanov merged 4 commits into
libp2p:masterfrom
StefanBratanov:1.3.2

Conversation

@StefanBratanov

Copy link
Copy Markdown
Collaborator

No description provided.

lucassaldanha and others added 4 commits June 10, 2026 17:36
When the dialing transport had an active QUIC listener (as every real
node does), dial() tried to bind a separate NioDatagramChannel to the
listener's own port using only SO_REUSEADDR. On Linux two UDP sockets
cannot share a port without SO_REUSEPORT (an Epoll-only option), so the
bind threw BindException. The fallback then re-used the same non-@sharable
QUIC codec handler instance on a second channel, which also throws, so the
outbound connection never completed and timed out — 0 successful outbound
dials on listening nodes.

Always bind the dial socket to an ephemeral port (the path already
exercised by every passing QUIC test). NAT-consistent dialing for hole
punching is unaffected: dialAsListener reuses the listener socket directly.

Add QuicServerTestJava.dialWhileListeningCompletes regression test that
dials while a listener is active — the previously-untested broken branch.
@StefanBratanov StefanBratanov merged commit 066722c into libp2p:master Jun 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants