+2006-07-22 Yoann Vandoorselaere <yoann.v@prelude-ids.com>
+ and Simon Josefsson <jas@extundo.com>
+
+ * getaddrinfo.h (AI_PASSIVE): Make sure it is defined.
+
+ * getaddrinfo.c (getaddrinfo): Support AI_PASSIVE.
+
2006-07-21 Eric Blake <ebb9@byu.net>
* stdlib-safer.h: New file from coreutils, required by
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;
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)
{
#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,
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. */