#include "unp.h" static const char *str_fam(int); int main(int argc, char **argv) { char *ptr; struct addrinfo hints, *res; char rhost[NI_MAXHOST]; bzero(&hints, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_flags |= AI_CANONNAME; int n, rc; while (--argc > 0) { ptr = *++argv; if ( (n = getaddrinfo(ptr, NULL, &hints, &res)) != 0) err_quit("udp_server error for %s: %s", ptr, gai_strerror(n)); do{ if (res->ai_canonname) printf("ai_canonname = %s\n", res->ai_canonname); printf("address:(%s) %s\n",str_fam(res->ai_family), Sock_ntop(res->ai_addr, res->ai_addrlen)); /* * Call getnameinfo() to check the reverse mapping. */ rc = getnameinfo(res->ai_addr, res->ai_addrlen, rhost, NI_MAXHOST, NULL, NULL, NI_NAMEREQD); if (rc == 0) { printf("\tgetnameinfo: host = %s\n", rhost ); } else printf("getnameinfo returned %d (%s)\n", rc, gai_strerror(rc)); } while ( (res = res->ai_next) != NULL); } exit(0); } static const char * str_fam(int family) { #ifdef IPv4 if (family == AF_INET) return("AF_INET"); #endif #ifdef IPv6 if (family == AF_INET6) return("AF_INET6"); #endif #ifdef UNIXdomain if (family == AF_LOCAL) return("AF_LOCAL"); #endif return(""); }