version 1.17, 2018/09/25 19:48:14 |
version 1.18, 2018/09/25 19:51:39 |
|
|
printfmtstrings(he->h_aliases, " ", " ", "%-16s %s", buf, he->h_name); |
printfmtstrings(he->h_aliases, " ", " ", "%-16s %s", buf, he->h_name); |
} |
} |
static int |
static int |
hostsaddrinfo(char* name) |
hostsaddrinfo(const char *name) |
{ |
{ |
struct addrinfo hints, *res, *res0; |
struct addrinfo hints, *res, *res0; |
void *src; |
|
int rv; |
|
char buf[INET6_ADDRSTRLEN]; |
char buf[INET6_ADDRSTRLEN]; |
|
int rv; |
|
|
rv = RV_NOTFOUND; |
rv = RV_NOTFOUND; |
memset(buf, 0, sizeof(buf)); |
memset(buf, 0, sizeof(buf)); |
memset(&hints, 0, sizeof(hints)); |
memset(&hints, 0, sizeof(hints)); |
hints.ai_family = PF_UNSPEC; |
hints.ai_family = AF_UNSPEC; |
hints.ai_socktype = SOCK_DGRAM; |
hints.ai_socktype = SOCK_DGRAM; |
|
|
if (getaddrinfo(name, NULL, &hints, &res0) == 0) { |
if (getaddrinfo(name, NULL, &hints, &res0) != 0) |
for (res = res0; res; res = res->ai_next) { |
return (rv); |
switch (res->ai_family) { |
for (res = res0; res; res = res->ai_next) { |
case AF_INET: |
if ((res->ai_family != AF_INET6 && res->ai_family != AF_INET) || |
src = &((struct sockaddr_in*) |
getnameinfo(res->ai_addr, res->ai_addrlen, buf, sizeof(buf), |
res->ai_addr)->sin_addr; |
NULL, 0, NI_NUMERICHOST) != 0) |
break; |
strlcpy(buf, "# unknown", sizeof(buf)); |
case AF_INET6: |
else |
src = &((struct sockaddr_in6*) |
rv = RV_OK; |
res->ai_addr)->sin6_addr; |
printf("%-39s %s\n", buf, name); |
break; |
|
default: /* not reached */ |
|
src = NULL; |
|
} |
|
if (src==NULL || inet_ntop(res->ai_family, src, buf, |
|
sizeof(buf)) == NULL) |
|
strlcpy(buf, "# unknown", sizeof(buf)); |
|
else |
|
rv = RV_OK; |
|
printf("%-39s %s\n", buf, name); |
|
} |
|
freeaddrinfo(res0); |
|
} |
} |
|
freeaddrinfo(res0); |
|
|
return (rv); |
return (rv); |
} |
} |