diff options
Diffstat (limited to 'src/port/getaddrinfo.c')
-rw-r--r-- | src/port/getaddrinfo.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c index 52a20c5c2cc..7880ad8a16e 100644 --- a/src/port/getaddrinfo.c +++ b/src/port/getaddrinfo.c @@ -181,7 +181,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 { @@ -347,8 +347,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 @@ -375,6 +375,10 @@ getnameinfo(const struct sockaddr * sa, int salen, return EAI_FAMILY; #endif + /* Unsupported flags. */ + if (flags & NI_NAMEREQD) + return EAI_AGAIN; + if (node) { if (sa->sa_family == AF_INET) @@ -397,7 +401,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; } |