connect: improve binding to local ports on Windows #8528
Closed
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.
There is a configuration parameter in windows registry
called TcpTimedWaitDelay that determines the time that a
connection stays in the TIME_WAIT state when it is closing.
It's minimum and default value is 30 seconds.
As long as a connection is in the TIME_WAIT state, the socket pair
cannot be re-used, BUT bind() still returns 0 in this case.
curl now can detect the state of a given port using
GetTcpTable2() for IPv4 connections and avoids to bind that port
if the state is TIME_WAIT
ref: https://docs.microsoft.com/en-us/troubleshoot/windows-client/networking/tcpip-and-nbt-configuration-parameters#optional-tcpip-parameters-that-you-can-configure-by-using-registry-editor
Fixes: #8112
Reported-by: gclinch on github