#define _GNU_SOURCE #include #include #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; }