体验新版 GitCode,发现更多精彩内容 >>
#define _GNU_SOURCE #include <netdb.h>
#include <errno.h> #include <stdlib.h>
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;
}