Avoid ephemeral port exhaustion when binding to a specific IP #87
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is edumazet's patch.
The network client was binding to a specific IP address without using
IP_BIND_ADDRESS_NO_PORT. This forces the kernel to allocate an exclusive ephemeral port for each connection beforeconnect(), leading to "Address already in use" errors when many concurrent connections are attempted (around 60k flows).This commit adds a
setsockoptcall withIP_BIND_ADDRESS_NO_PORTbefore thebindcall. This allows the kernel to defer port selection untilconnect(), enabling the client to establish many more concurrent connections without exhausting the ephemeral port range.Tested:
IP_BIND_ADDRESS_NO_PORTis called before bind.