mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
Only ever test for non-127.0.0.1 addresses on Windows in PostgresNode
This has been found to cause hangs where tcp usage is forced. Alexey Kodratov Discussion: https://postgr.es/m/82e271a9a11928337fcb5b5e57b423c0@postgrespro.ru Backpatch to all live branches
This commit is contained in:
parent
d84ffffe58
commit
d064afc720
@ -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))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user