1:
2:
3: #include <netdb.h>
4: #include <arpa/inet.h>
5: #include <errno.h>
6: #include <string.h>
7: #include <stdio.h>
8: #include <stdlib.h>
9: #include <unistd.h>
10:
11: int
12: main (void)
13: {
14: const char *host = "www.gnu.org";
15:
16:
17:
18: struct hostent hostbuf, *hp;
19: size_t hstbuflen;
20: char *tmphstbuf;
21: int res;
22: int herr;
23:
24: hstbuflen = 16;
25:
26: tmphstbuf = malloc (hstbuflen);
27:
28: while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
29: &hp, &herr)) == ERANGE)
30: {
31:
32: hstbuflen *= 2;
33: tmphstbuf = realloc (tmphstbuf, hstbuflen);
34: }
35:
36: if (res != 0 || hp == NULL)
37: {
38: printf ("gethostbyname_r failed: %s (errno: %m)\n", strerror (res));
39:
40: if (access ("/etc/resolv.conf", R_OK))
41: {
42: puts ("DNS probably not set up");
43: return 0;
44: }
45:
46: return 1;
47: }
48:
49: printf ("Got: %s %s\n", hp->h_name,
50: inet_ntoa (*(struct in_addr *) hp->h_addr));
51: return 0;
52: }