]> git.ipfire.org Git - thirdparty/glibc.git/blame - resolv/ga_test.c
Consistency about byte vs character in string.texi
[thirdparty/glibc.git] / resolv / ga_test.c
CommitLineData
2ace5721
UD
1#include <arpa/inet.h>
2#include <netinet/in.h>
3#include <netdb.h>
4#include <signal.h>
5#include <stdio.h>
6#include <stdlib.h>
7
8
9int
10main (void)
11{
12#define N 10
13 struct gaicb reqmem[N];
14 struct gaicb *req[N];
15 int n;
16
17 for (n = 0; n < N; ++n)
18 {
19 asprintf (&reqmem[n].ar_name, "test%d.test.redhat.com", 140 + n);
20 reqmem[n].ar_service = NULL;
21 reqmem[n].ar_request = NULL;
22 reqmem[n].ar_result = NULL;
23 req[n] = &reqmem[n];
24 }
25
26 if (getaddrinfo_a (GAI_NOWAIT, req, N, NULL) != 0)
27 {
28 puts ("queue call failed");
29 exit (1);
30 }
31 else
32 puts ("queue call successful");
33
34 while (1)
35 {
36 int any = 0;
37
38 for (n = 0; n < N; ++n)
39 if (req[n] != NULL && gai_error (req[n]) != EAI_INPROGRESS)
40 {
41 if (gai_error (req[n]) == 0)
42 {
43 struct addrinfo *runp = req[n]->ar_result;
44
45 while (runp != NULL)
46 {
47 switch (runp->ai_family)
48 {
49 case PF_INET:
50 {
51 struct sockaddr_in *sinp;
52
53 sinp = (struct sockaddr_in *) runp->ai_addr;
54 printf ("%2d: %s = %s\n", n,
55 req[n]->ar_name, inet_ntoa (sinp->sin_addr));
56 }
57 break;
58 default:
59 printf ("%2d: family %d\n", n, runp->ai_family);
60 break;
61 }
62 runp = runp->ai_next;
63 }
64 }
65 else
66 printf ("error for %d: %s\n", n,
67 gai_strerror (gai_error (req[n])));
68 req[n] = NULL;
69 break;
70 }
71 else if (req[n] != NULL)
72 any = 1;
73
74 if (n == N)
75 {
76 if (any)
77 gai_suspend (req, N, NULL);
78 else
79 break;
80 }
81 }
82
83 __libc_write(1,"got all\n", 8);
84
85 for (n = 0; n < N; ++n)
86 if (gai_error (&reqmem[n]) == 0)
87 {
88 struct addrinfo *runp = reqmem[n].ar_result;
89
90 while (runp != NULL)
91 {
92 struct addrinfo *oldp = runp;
93 runp = runp->ai_next;
94 freeaddrinfo (oldp);
95 }
96 }
97
98 return 0;
99}