Native win32 support for getaddrinfo. Add getnameinfo function.
[gnulib.git] / tests / test-getaddrinfo.c
1 #include "config.h"
2 #include "getaddrinfo.h"
3 #include "inet_ntop.h"
4 #include <stdio.h>
5 #include <string.h>
6
7 int simple (char *host, char *service)
8 {
9   char buf[BUFSIZ];
10   struct addrinfo hints;
11   struct addrinfo *ai0, *ai;
12   int res;
13
14   printf ("Finding %s service %s...\n", host, service);
15
16   memset (&hints, 0, sizeof (hints));
17   hints.ai_flags = AI_CANONNAME;
18   hints.ai_family = AF_UNSPEC;
19   hints.ai_socktype = SOCK_STREAM;
20   res = getaddrinfo (host, service, 0, &ai0);
21
22   printf ("res %d: %s\n", res, gai_strerror (res));
23
24   if (res != 0)
25     return 1;
26
27   for (ai = ai0; ai; ai = ai->ai_next)
28     {
29       printf ("\tflags %x\n", ai->ai_flags);
30       printf ("\tfamily %x\n", ai->ai_family);
31       printf ("\tsocktype %x\n", ai->ai_socktype);
32       printf ("\tprotocol %x\n", ai->ai_protocol);
33       printf ("\taddrlen %d: ", ai->ai_addrlen);
34       printf ("\tFound %s\n",
35               inet_ntop (ai->ai_family,
36                          &((struct sockaddr_in *)
37                           ai->ai_addr)->sin_addr,
38                          buf, sizeof (buf) - 1));
39       if (ai->ai_canonname)
40         printf ("\tFound %s...\n", ai->ai_canonname);
41
42       {
43         char ipbuf[BUFSIZ];
44         char portbuf[BUFSIZ];
45
46         res = getnameinfo (ai->ai_addr, ai->ai_addrlen,
47                            ipbuf, sizeof (ipbuf) - 1,
48                            portbuf, sizeof (portbuf) - 1,
49                            NI_NUMERICHOST|NI_NUMERICSERV);
50         printf ("\t\tgetnameinfo %d: %s\n", res, gai_strerror (res));
51         if (res == 0)
52           {
53             printf ("\t\tip %s\n", ipbuf);
54             printf ("\t\tport %s\n", portbuf);
55           }
56       }
57
58     }
59
60   freeaddrinfo (ai0);
61
62   return 0;
63 }
64
65 #define HOST1 "www.gnu.org"
66 #define SERV1 "http"
67 #define HOST2 "www.ibm.com"
68 #define SERV2 "https"
69 #define HOST3 "microsoft.com"
70 #define SERV3 "http"
71 #define HOST4 "google.org"
72 #define SERV4 "ldap"
73
74 int main (void)
75 {
76 #if _WIN32
77   {
78     WORD requested;
79     WSADATA data;
80     int err;
81
82     requested = MAKEWORD (1, 1);
83     err = WSAStartup (requested, &data);
84     if (err != 0)
85       return 1;
86
87     if (data.wVersion < requested)
88       {
89         WSACleanup ();
90         return 2;
91       }
92   }
93 #endif
94
95   return simple (HOST1, SERV1)
96     + simple (HOST2, SERV2)
97     + simple (HOST3, SERV3)
98     + simple (HOST4, SERV4);
99 }