// reference: https://www.geekpage.jp/programming/winsock/getaddrinfo.php #include #include #include #include #include void dump(void *ptr, int len) { int i; unsigned char *p = ptr; for (i = 0; i < len; i++) { if (i && !(i % 16)) printf("\t\t"); printf("%02x ", *p++); if (!((i + 1) % 16)) printf("\n"); } if (i % 16) printf("\n"); } int main(int argc, char *argv[]) { struct addrinfo hints, *res, *rp; int err; if (argc < 2) { printf("%s [argument]\n", argv[0]); return 0; } memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_DGRAM; //hints.ai_family = AF_INET; //node is not NULL, so hints.ai_flags = AI_PASSIVE has no meaning hints.ai_flags = AI_CANONNAME; err = getaddrinfo(argv[1], NULL, &hints, &res); if (err) { printf("getaddrinfo %d\n", err); return 0; } for (rp = res; rp != NULL; rp = rp->ai_next) { printf("*\n"); printf("ai_flags: %#x\n", rp->ai_flags); printf("ai_family: %#x\n", rp->ai_family); printf("ai_socktype: %#x\n", rp->ai_socktype); printf("ai_addrlen: %#x\n", rp->ai_addrlen); printf("ai_addr: "); dump(rp->ai_addr, rp->ai_addrlen); printf("ai_canonname: %s\n", rp->ai_canonname); } freeaddrinfo(res); return 0; }