2000-11-18  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/posix/getaddrinfo.c (gaih_inet): Only return -EAI_AGAIN
	if IPv4 and IPv6 requests timed out.
This commit is contained in:
Ulrich Drepper 2000-11-18 08:30:20 +00:00
parent 565bc88a12
commit 7813b61a41
2 changed files with 19 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2000-11-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/getaddrinfo.c (gaih_inet): Only return -EAI_AGAIN
if IPv4 and IPv6 requests timed out.
2000-11-18 Akim Demaille <akim@epita.fr> 2000-11-18 Akim Demaille <akim@epita.fr>
* malloc/obstack.h: Formatting changes. * malloc/obstack.h: Formatting changes.

View File

@ -271,6 +271,7 @@ gaih_inet_serv (const char *servicename, struct gaih_typeproto *tp,
struct hostent th; \ struct hostent th; \
char *tmpbuf; \ char *tmpbuf; \
tmpbuflen = 512; \ tmpbuflen = 512; \
no_data = 0; \
do { \ do { \
tmpbuflen *= 2; \ tmpbuflen *= 2; \
tmpbuf = __alloca (tmpbuflen); \ tmpbuf = __alloca (tmpbuflen); \
@ -285,12 +286,11 @@ gaih_inet_serv (const char *servicename, struct gaih_typeproto *tp,
return -EAI_SYSTEM; \ return -EAI_SYSTEM; \
} \ } \
if (herrno == TRY_AGAIN) \ if (herrno == TRY_AGAIN) \
{ \ no_data = EAI_AGAIN; \
__set_h_errno (herrno); \ else \
return -EAI_AGAIN; \ no_data = herrno == NO_DATA; \
} \
} \ } \
if (h != NULL) \ else if (h != NULL) \
{ \ { \
for (i = 0; h->h_addr_list[i]; i++) \ for (i = 0; h->h_addr_list[i]; i++) \
{ \ { \
@ -305,7 +305,6 @@ gaih_inet_serv (const char *servicename, struct gaih_typeproto *tp,
pat = &((*pat)->next); \ pat = &((*pat)->next); \
} \ } \
} \ } \
no_data = rc != 0 && herrno == NO_DATA; \
} }
static int static int
@ -510,9 +509,15 @@ gaih_inet (const char *name, const struct gaih_service *service,
gethosts (AF_INET, struct in_addr); gethosts (AF_INET, struct in_addr);
if (no_data != 0 && no_inet6_data != 0) if (no_data != 0 && no_inet6_data != 0)
/* We made requests but they turned out no data. The name {
is known, though. */ /* If both requests timed out report this. */
return (GAIH_OKIFUNSPEC | -EAI_NODATA); if (no_data == EAI_AGAIN && no_inet6_data == EAI_AGAIN)
return -EAI_AGAIN;
/* We made requests but they turned out no data. The name
is known, though. */
return (GAIH_OKIFUNSPEC | -EAI_NODATA);
}
} }
if (at->family == AF_UNSPEC) if (at->family == AF_UNSPEC)