--- /dev/null
+#include <stdio.h>\r
+#include <unistd.h>\r
+#include <string.h>\r
+#include <sys/socket.h>\r
+#include <netdb.h>\r
+\r
+#ifndef MAXHOSTNAMELEN\r
+#define MAXHOSTNAMELEN 64\r
+#endif\r
+\r
+int main(int argc, char **argv)\r
+{\r
+ struct addrinfo *ai, hints;\r
+ char *hostname;\r
+ char localname[MAXHOSTNAMELEN];\r
+ char hnamebuf[NI_MAXHOST];\r
+\r
+ if(gethostname(localname, MAXHOSTNAMELEN)) {\r
+ return 1;\r
+ }\r
+ printf("gethostname() returns \"%s\"\n", localname);\r
+\r
+ if(argc == 2) {\r
+ hostname = argv[1];\r
+ } else {\r
+ hostname = localname;\r
+ }\r
+ printf("Using \"%s\" as service host name\n", hostname);\r
+\r
+ memset(&hints, 0, sizeof(hints));\r
+ hints.ai_family = AF_INET;\r
+ if(getaddrinfo(hostname, NULL, &hints, &ai)) {\r
+ printf("getaddrinfo() failed\n");\r
+ return 1;\r
+ }\r
+\r
+ if(ai->ai_canonname) {\r
+ hostname = strdup(ai->ai_canonname);\r
+ printf("Canonical hostname from getaddrinfo() is \"%s\"\n", hostname);\r
+ }\r
+ \r
+ if(getnameinfo(ai->ai_addr, ai->ai_addrlen, hnamebuf, sizeof(hnamebuf),\r
+ NULL, 0, NI_NAMEREQD)) {\r
+ printf("getnameinfo() failed\n");\r
+ return 1;\r
+ }\r
+\r
+ printf("Hostname from getnameinfo() is \"%s\"\n", hnamebuf);\r
+\r
+ freeaddrinfo(ai);\r
+ return 0;\r
+}\r