#define _GNU_SOURCE #include #include #include struct hostent* gethostbyaddr(const void* a, socklen_t l, int af) { static struct hostent* h; size_t size = 63; struct hostent* res; int err; do { free(h); h = malloc(size += size + 1); if (!h) { h_errno = NO_RECOVERY; return 0; } err = gethostbyaddr_r(a, l, af, h, (void*)(h + 1), size - sizeof *h, &res, &h_errno); } while (err == ERANGE); return err ? 0 : h; }