diff --git a/src/backend/libpq/ip.c b/src/backend/libpq/ip.c
index 917bda828333bcc0887ab4b914e7ea3fdfb7cf36..5f42676b3603f98de8e6f93e185690cf816dda3b 100644
--- a/src/backend/libpq/ip.c
+++ b/src/backend/libpq/ip.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.36 2006/06/20 19:56:52 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.37 2006/10/19 17:26:32 tgl Exp $
  *
  * This file and the IPV6 implementation were initially provided by
  * Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design
@@ -72,6 +72,15 @@ pg_getaddrinfo_all(const char *hostname, const char *servname,
 		return getaddrinfo_unix(servname, hintp, result);
 #endif
 
+#ifdef _AIX
+	/*
+	 * It seems AIX's getaddrinfo doesn't reliably zero sin_port when servname
+	 * is NULL, so force the issue.
+	 */
+	if (servname == NULL)
+		servname = "0";
+#endif
+
 	/* NULL has special meaning to getaddrinfo(). */
 	return getaddrinfo((!hostname || hostname[0] == '\0') ? NULL : hostname,
 					   servname, hintp, result);