diff options
Diffstat (limited to 'src/port/getaddrinfo.c')
-rw-r--r-- | src/port/getaddrinfo.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c index c117012ec7e..3d23ffecaa3 100644 --- a/src/port/getaddrinfo.c +++ b/src/port/getaddrinfo.c @@ -182,7 +182,7 @@ getaddrinfo(const char *node, const char *service, else if (hints.ai_flags & AI_NUMERICHOST) { if (!inet_aton(node, &sin.sin_addr)) - return EAI_FAIL; + return EAI_NONAME; } else { @@ -349,8 +349,8 @@ gai_strerror(int errcode) /* * Convert an ipv4 address to a hostname. * - * Bugs: - Only supports NI_NUMERICHOST and NI_NUMERICSERV - * It will never resolv a hostname. + * Bugs: - Only supports NI_NUMERICHOST and NI_NUMERICSERV behavior. + * It will never resolve a hostname. * - No IPv6 support. */ int @@ -373,16 +373,15 @@ getnameinfo(const struct sockaddr * sa, int salen, if (sa == NULL || (node == NULL && service == NULL)) return EAI_FAIL; - /* We don't support those. */ - if ((node && !(flags & NI_NUMERICHOST)) - || (service && !(flags & NI_NUMERICSERV))) - return EAI_FAIL; - #ifdef HAVE_IPV6 if (sa->sa_family == AF_INET6) return EAI_FAMILY; #endif + /* Unsupported flags. */ + if (flags & NI_NAMEREQD) + return EAI_AGAIN; + if (node) { if (sa->sa_family == AF_INET) @@ -405,7 +404,7 @@ getnameinfo(const struct sockaddr * sa, int salen, ret = snprintf(service, servicelen, "%d", ntohs(((struct sockaddr_in *) sa)->sin_port)); } - if (ret == -1 || ret > servicelen) + if (ret == -1 || ret >= servicelen) return EAI_MEMORY; } |