#include #include #include #include #include #include #include #include #include #include extern int h_errno; struct hostent* gethostbyaddr(const void *addr, socklen_t len, int type) { static struct hostent hostbuf; struct hostent *hp; size_t hstbuflen; char *tmphstbuf; int res; int herr; hstbuflen = 1024; /* Allocate buffer, remember to free it to avoid a memory leakage. */ tmphstbuf = malloc (hstbuflen); while ((res = gethostbyaddr_r (addr, len, type, &hostbuf, tmphstbuf, hstbuflen, &hp, &herr)) == ERANGE) { /* Enlarge the buffer. */ hstbuflen *= 2; tmphstbuf = realloc (tmphstbuf, hstbuflen); } /* Check for errors. */ if (res || hp == NULL) return NULL; return hp; }