From 361c5154c63de94ec3571612225de4a6933189b7 Mon Sep 17 00:00:00 2001 From: Simon Josefsson Date: Sat, 22 Jul 2006 10:13:57 +0000 Subject: [PATCH] 2006-07-22 Yoann Vandoorselaere and Simon Josefsson * getaddrinfo.h (AI_PASSIVE): Make sure it is defined. * getaddrinfo.c (getaddrinfo): Support AI_PASSIVE. --- lib/ChangeLog | 7 +++++++ lib/getaddrinfo.c | 14 +++++++++++--- lib/getaddrinfo.h | 5 ++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 81548c3dce..f0dc0f76bf 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,10 @@ +2006-07-22 Yoann Vandoorselaere + and Simon Josefsson + + * getaddrinfo.h (AI_PASSIVE): Make sure it is defined. + + * getaddrinfo.c (getaddrinfo): Support AI_PASSIVE. + 2006-07-21 Eric Blake * stdlib-safer.h: New file from coreutils, required by diff --git a/lib/getaddrinfo.c b/lib/getaddrinfo.c index e6bad11038..9003abf60a 100644 --- a/lib/getaddrinfo.c +++ b/lib/getaddrinfo.c @@ -140,7 +140,7 @@ getaddrinfo (const char *restrict nodename, return getaddrinfo_ptr (nodename, servname, hints, res); #endif - if (hints && (hints->ai_flags & ~AI_CANONNAME)) + if (hints && (hints->ai_flags & ~(AI_CANONNAME|AI_PASSIVE))) /* FIXME: Support more flags. */ return EAI_BADFLAGS; @@ -153,8 +153,16 @@ getaddrinfo (const char *restrict nodename, return EAI_SOCKTYPE; /* FIXME: Better return code? */ if (!nodename) - /* FIXME: Support server bind mode. */ - return EAI_NONAME; + { + if (!(hints->ai_flags & AI_PASSIVE)) + return EAI_NONAME; + +#ifdef HAVE_IPV6 + nodename = (hint->ai_family == AF_INET6) ? "::" : "0.0.0.0"; +#else + nodename = "0.0.0.0"; +#endif + } if (servname) { diff --git a/lib/getaddrinfo.h b/lib/getaddrinfo.h index 58048f4d65..b4ef242cf1 100644 --- a/lib/getaddrinfo.h +++ b/lib/getaddrinfo.h @@ -48,12 +48,16 @@ struct addrinfo #endif /* Possible values for `ai_flags' field in `addrinfo' structure. */ +#ifndef AI_PASSIVE +# define AI_PASSIVE 0x0001 /* Socket address is intended for `bind'. */ +#endif #ifndef AI_CANONNAME # define AI_CANONNAME 0x0002 /* Request for canonical name. */ #endif #ifndef AI_NUMERICSERV # define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */ #endif + #if 0 /* The commented out definitions below are not yet implemented in the GNULIB getaddrinfo() replacement, so are not yet needed and may, in fact, @@ -61,7 +65,6 @@ struct addrinfo define them. If they are restored, be sure to protect the definitions with #ifndef. */ -#define AI_PASSIVE 0x0001 /* Socket address is intended for `bind'. */ #define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */ #define AI_V4MAPPED 0x0008 /* IPv4 mapped addresses are acceptable. */ #define AI_ALL 0x0010 /* Return IPv4 mapped and IPv6 addresses. */ -- 2.30.2