#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <strings.h>

#ifndef   NI_MAXHOST
#define   NI_MAXHOST 1025
#endif

int main(void)
{
    struct addrinfo * result;
    struct addrinfo * res;
    int error;
    struct addrinfo hints;
    bzero(&hints, sizeof hints);
    hints.ai_family = PF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    /* resolve the domain name into a list of addresses */
    error = getaddrinfo("mithrandi.net", "xmpp-server", &hints, &result);

    if (error != 0)
    {
        fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
        return 1;
    }

    /* loop over all returned results and do inverse lookup */
    for (res = result; res != NULL; res = res->ai_next)
    {
        char hostname[NI_MAXHOST] = "";
        char servname[NI_MAXHOST] = "";

        error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, servname, NI_MAXHOST, NI_NUMERICHOST | NI_NUMERICSERV);

        if (error != 0)
        {
            fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
            continue;
        }

        if (*hostname)
        {
            printf("hostname: %s  servname: %s\n", hostname, servname);
        }

    }

    freeaddrinfo(result);

    return 0;
}
