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)8struct 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