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