|
|
|
@ -1332,19 +1332,22 @@ sub get_free_port |
|
|
|
|
# Check to see if anything else is listening on this TCP port. |
|
|
|
|
# Seek a port available for all possible listen_addresses values, |
|
|
|
|
# so callers can harness this port for the widest range of purposes. |
|
|
|
|
# The 0.0.0.0 test achieves that for post-2006 Cygwin, which |
|
|
|
|
# automatically sets SO_EXCLUSIVEADDRUSE. The same holds for MSYS (a |
|
|
|
|
# Cygwin fork). Testing 0.0.0.0 is insufficient for Windows native |
|
|
|
|
# Perl (https://stackoverflow.com/a/14388707), so we also test |
|
|
|
|
# individual addresses. |
|
|
|
|
# The 0.0.0.0 test achieves that for MSYS, which automatically sets |
|
|
|
|
# SO_EXCLUSIVEADDRUSE. Testing 0.0.0.0 is insufficient for Windows |
|
|
|
|
# native Perl (https://stackoverflow.com/a/14388707), so we also |
|
|
|
|
# have to test individual addresses. Doing that for 127.0.0/24 |
|
|
|
|
# addresses other than 127.0.0.1 might fail with EADDRNOTAVAIL on |
|
|
|
|
# non-Linux, non-Windows kernels. |
|
|
|
|
# |
|
|
|
|
# On non-Linux, non-Windows kernels, binding to 127.0.0/24 addresses |
|
|
|
|
# other than 127.0.0.1 might fail with EADDRNOTAVAIL. Binding to |
|
|
|
|
# 0.0.0.0 is unnecessary on non-Windows systems. |
|
|
|
|
# Thus, 0.0.0.0 and individual 127.0.0/24 addresses are tested |
|
|
|
|
# only on Windows and only when TCP usage is requested. |
|
|
|
|
if ($found == 1) |
|
|
|
|
{ |
|
|
|
|
foreach my $addr (qw(127.0.0.1), |
|
|
|
|
$use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) |
|
|
|
|
$use_tcp ? qw(127.0.0.2 127.0.0.3 0.0.0.0) : ()) |
|
|
|
|
$use_tcp && $TestLib::windows_os |
|
|
|
|
? qw(127.0.0.2 127.0.0.3 0.0.0.0) |
|
|
|
|
: ()) |
|
|
|
|
{ |
|
|
|
|
if (!can_bind($addr, $port)) |
|
|
|
|
{ |
|
|
|
|