]>
Commit | Line | Data |
---|---|---|
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 | ||
9 | int | |
10 | main (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 | } |