aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/perl/PostgresNode.pm18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index cd2e974de18..4f9d4bb34cd 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -859,12 +859,18 @@ sub get_new_node
# to open a TCP port on Unix.
if ($found == 1)
{
- my $iaddr = inet_aton($test_localhost);
- my $paddr = sockaddr_in($port, $iaddr);
- my $proto = getprotobyname("tcp");
-
- socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die;
- $found = 0 if connect(SOCK, $paddr);
+ my $iaddr = inet_aton($test_localhost);
+ my $paddr = sockaddr_in($port, $iaddr);
+ my $proto = getprotobyname("tcp");
+
+ socket(SOCK, PF_INET, SOCK_STREAM, $proto)
+ or die "socket failed: $!";
+
+ # As in postmaster, don't use SO_REUSEADDR on Windows
+ setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
+ unless $TestLib::windows_os;
+ (bind(SOCK, $paddr) && listen(SOCK, SOMAXCONN))
+ or $found = 0;
close(SOCK);
}
}