/[resiprocate]/main/contrib/ares/ahost.c
ViewVC logotype

Contents of /main/contrib/ares/ahost.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5295 - (show annotations) (download)
Mon Aug 22 00:30:05 2005 UTC (14 years, 3 months ago) by jason
File MIME type: text/plain
File size: 2808 byte(s)
merged 5270:HEAD from b-directory-reorg
1 /* Copyright 1998 by the Massachusetts Institute of Technology.
2 *
3 * Permission to use, copy, modify, and distribute this
4 * software and its documentation for any purpose and without
5 * fee is hereby granted, provided that the above copyright
6 * notice appear in all copies and that both that copyright
7 * notice and this permission notice appear in supporting
8 * documentation, and that the name of M.I.T. not be used in
9 * advertising or publicity pertaining to distribution of the
10 * software without specific, written prior permission.
11 * M.I.T. makes no representations about the suitability of
12 * this software for any purpose. It is provided "as is"
13 * without express or implied warranty.
14 */
15
16 #ifndef WIN32
17 #include <sys/types.h>
18 #include <sys/time.h>
19 #include <sys/socket.h>
20 #include <netinet/in.h>
21 #include <arpa/inet.h>
22 #include <unistd.h>
23 #include <netdb.h>
24 #endif
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include "ares.h"
29 #include "ares_dns.h"
30
31 #ifndef INADDR_NONE
32 #define INADDR_NONE 0xffffffff
33 #endif
34
35 static void callback(void *arg, int status, struct hostent *host);
36 static void usage(void);
37
38 int main(int argc, char **argv)
39 {
40 ares_channel channel;
41 int status, nfds;
42 fd_set read_fds, write_fds;
43 struct timeval *tvp, tv;
44 char *errmem;
45 struct in_addr addr;
46
47 if (argc == 0)
48 usage();
49
50 status = ares_init(&channel);
51 if (status != ARES_SUCCESS)
52 {
53 fprintf(stderr, "ares_init: %s\n", ares_strerror(status, &errmem));
54 ares_free_errmem(errmem);
55 return 1;
56 }
57
58 /* Initiate the queries, one per command-line argument. */
59 for (argv++; *argv; argv++)
60 {
61 addr.s_addr = inet_addr(*argv);
62 if (addr.s_addr == INADDR_NONE)
63 ares_gethostbyname(channel, *argv, AF_INET, callback, *argv);
64 else
65 {
66 ares_gethostbyaddr(channel, &addr, sizeof(addr), AF_INET, callback,
67 *argv);
68 }
69 }
70
71 /* Wait for all queries to complete. */
72 while (1)
73 {
74 FD_ZERO(&read_fds);
75 FD_ZERO(&write_fds);
76 nfds = ares_fds(channel, &read_fds, &write_fds);
77 if (nfds == 0)
78 break;
79 tvp = ares_timeout(channel, NULL, &tv);
80 select(nfds, &read_fds, &write_fds, NULL, tvp);
81 ares_process(channel, &read_fds, &write_fds);
82 }
83
84 ares_destroy(channel);
85 return 0;
86 }
87
88 static void callback(void *arg, int status, struct hostent *host)
89 {
90 struct in_addr addr;
91 char *mem, **p;
92
93 if (status != ARES_SUCCESS)
94 {
95 fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status, &mem));
96 ares_free_errmem(mem);
97 return;
98 }
99
100 for (p = host->h_addr_list; *p; p++)
101 {
102 memcpy(&addr, *p, sizeof(struct in_addr));
103 printf("%-32s\t%s\n", host->h_name, inet_ntoa(addr));
104 }
105 }
106
107 static void usage(void)
108 {
109 fprintf(stderr, "usage: ahost {host|addr} ...\n");
110 exit(1);
111 }

webmaster AT resiprocate DOT org
ViewVC Help
Powered by ViewVC 1.1.27