diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index dacdfef323c07b5d5c984f021e4f3318be1383ce..03b9770d5007ebc9e93b0936e10534dcdc80dd7e 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -646,9 +646,20 @@ test_postmaster_connection(pgpid_t pm_pid, bool do_checkpoint) return PQPING_NO_ATTEMPT; } - /* If postmaster is listening on "*", use localhost */ + /* + * Map listen-only addresses to counterparts usable + * for establishing a connection. connect() to "::" + * or "0.0.0.0" is not portable to OpenBSD 5.0 or to + * Windows Server 2008, and connect() to "::" is + * additionally not portable to NetBSD 6.0. (Cygwin + * does handle both addresses, though.) + */ if (strcmp(host_str, "*") == 0) strcpy(host_str, "localhost"); + else if (strcmp(host_str, "0.0.0.0") == 0) + strcpy(host_str, "127.0.0.1"); + else if (strcmp(host_str, "::") == 0) + strcpy(host_str, "::1"); /* * We need to set connect_timeout otherwise on Windows