# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1340313128 -7200 # Node ID 760168a444e2339b104af51e2108e41d18985fba initial diff -r 000000000000 -r 760168a444e2 Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile Thu Jun 21 23:12:08 2012 +0200 @@ -0,0 +1,6 @@ +CFLAGS = -O2 -Wall + +.PHONY: all clean + +all: gai +clean: ; rm -f *.o gai diff -r 000000000000 -r 760168a444e2 gai.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gai.c Thu Jun 21 23:12:08 2012 +0200 @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +#include +#include +#include + +int main(int argc, char **argv) +{ + const char *node, *service, *proto; + struct addrinfo *r, *results; + struct addrinfo hints = { 0 }; + int e; + + if (argc < 2) { + fprintf(stderr, "Usage: %s hostname [service [protocol]]\n", argv[0]); + exit(1); + } + + node = argc > 1 ? argv[1] : NULL; + service = argc > 2 ? argv[2] : NULL; + proto = argc > 3 ? argv[3] : NULL; + + hints.ai_socktype = proto == NULL ? 0 + : strcmp(proto, "tcp") == 0 ? SOCK_STREAM + : strcmp(proto, "udp") == 0 ? SOCK_DGRAM + : 0; + + e = getaddrinfo(node, service, &hints, &results); + + if (e) { + fprintf(stderr, "%s: %s\n", argv[0], gai_strerror(e)); + exit(3); + } + + + for (r = results; r != 0; r = r->ai_next) { + char host[1024]; + char service[1024]; + int e; + e = getnameinfo(r->ai_addr, r->ai_addrlen, + host, sizeof(host), + service, sizeof(service), + NI_NUMERICHOST | NI_NUMERICSERV); + + if (e) { + fprintf(stderr, "getnameinfo: %s\n", gai_strerror(e)); + continue; + } + + printf("%s, %s %d/%d\n", host, service, r->ai_socktype, r->ai_protocol); + } + + + return 0; + +}