1#define _GNU_SOURCE 2 3#include <errno.h> 4#include <netdb.h> 5#include <stdlib.h> 6#include <sys/socket.h> 7 8struct hostent* gethostbyname2(const char* name, int af) { 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 = gethostbyname2_r(name, af, h, (void*)(h + 1), size - sizeof *h, &res, &h_errno); 21 } while (err == ERANGE); 22 return err ? 0 : h; 23} 24