• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #define _GNU_SOURCE
2 
3 #include <sys/socket.h>
4 #include <netdb.h>
5 #include <errno.h>
6 #include <stdlib.h>
7 
gethostbyname2(const char * name,int af)8 struct hostent *gethostbyname2(const char *name, int af)
9 {
10 	static struct hostent *h;
11 	size_t size = 63;
12 	struct hostent *res;
13 	int err;
14 	do {
15 		free(h);
16 		h = malloc(size+=size+1);
17 		if (!h) {
18 			h_errno = NO_RECOVERY;
19 			return 0;
20 		}
21 		err = gethostbyname2_r(name, af, h,
22 			(void *)(h+1), size-sizeof *h, &res, &h_errno);
23 	} while (err == ERANGE);
24 	return err ? 0 : h;
25 }
26