/* $begin hostinfo */
#include "csapp.h"

int main(int argc, char **argv) 
{
    struct addrinfo *p, *listp, hints;
    char abuf[MAXLINE];
    char nbuf[MAXLINE];
    int rc, aflags, nflags;

    if (argc != 2) {
	fprintf(stderr, "usage: %s <domain name>\n", argv[0]);
	exit(0);
    }

    /* Get a list of addrinfo records */
    memset(&hints, 0, sizeof(struct addrinfo));                         
#if 0
    hints.ai_family = AF_INET;       /* IPv4 only */        //line:netp:hostinfo:family
#endif
    hints.ai_socktype = SOCK_STREAM; /* Connections only */ //line:netp:hostinfo:socktype
    if ((rc = getaddrinfo(argv[1], NULL, &hints, &listp)) != 0) {
        fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(rc));
        exit(1);
    }

    /* Walk the list and display each IP address */
    aflags = NI_NUMERICHOST; /* Display address string instead of domain name */
    nflags = NI_NOFQDN;
    for (p = listp; p; p = p->ai_next) {
        Getnameinfo(p->ai_addr, p->ai_addrlen, abuf, MAXLINE, NULL, 0, aflags);
        Getnameinfo(p->ai_addr, p->ai_addrlen, nbuf, MAXLINE, NULL, 0, nflags);
        printf("%s (%s)\n", abuf, nbuf);
    } 

    /* Clean up */
    Freeaddrinfo(listp);

    exit(0);
}
/* $end hostinfo */
