Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit33af087

Browse files
committed
Try to fix the AIX getaddrinfo mess in a way that works on all versions.
Going to wait for buildfarm results before backpatching, this time.
1 parent0549ba8 commit33af087

File tree

1 file changed

+29
-8
lines changed
  • src/backend/libpq

1 file changed

+29
-8
lines changed

‎src/backend/libpq/ip.c

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.37 2006/10/19 17:26:32 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/libpq/ip.c,v 1.38 2006/10/1923:17:39 tgl Exp $
1212
*
1313
* This file and the IPV6 implementation were initially provided by
1414
* Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design
@@ -64,6 +64,8 @@ int
6464
pg_getaddrinfo_all(constchar*hostname,constchar*servname,
6565
conststructaddrinfo*hintp,structaddrinfo**result)
6666
{
67+
intrc;
68+
6769
/* not all versions of getaddrinfo() zero *result on failure */
6870
*result=NULL;
6971

@@ -72,18 +74,37 @@ pg_getaddrinfo_all(const char *hostname, const char *servname,
7274
returngetaddrinfo_unix(servname,hintp,result);
7375
#endif
7476

77+
/* NULL has special meaning to getaddrinfo(). */
78+
rc=getaddrinfo((!hostname||hostname[0]=='\0') ?NULL :hostname,
79+
servname,hintp,result);
80+
7581
#ifdef_AIX
7682
/*
77-
* It seems AIX's getaddrinfodoesn't reliably zero sin_port when servname
78-
* is NULL, soforce the issue.
83+
* It seemssome versions ofAIX's getaddrinfodon't reliably zero
84+
*sin_port when servnameis NULL, soclean up after it.
7985
*/
80-
if (servname==NULL)
81-
servname="0";
86+
if (servname==NULL&&rc==0)
87+
{
88+
structaddrinfo*addr;
89+
90+
for (addr=*result;addr;addr=addr->ai_next)
91+
{
92+
switch (addr->ai_family)
93+
{
94+
caseAF_INET:
95+
((structsockaddr_in*)addr->ai_addr)->sin_port=htons(0);
96+
break;
97+
#ifdefHAVE_IPV6
98+
caseAF_INET6:
99+
((structsockaddr_in6*)addr->ai_addr)->sin6_port=htons(0);
100+
break;
101+
#endif
102+
}
103+
}
104+
}
82105
#endif
83106

84-
/* NULL has special meaning to getaddrinfo(). */
85-
returngetaddrinfo((!hostname||hostname[0]=='\0') ?NULL :hostname,
86-
servname,hintp,result);
107+
returnrc;
87108
}
88109

89110

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp