#include #include #include #include #include #include #include #include #include #include extern int h_errno; struct hostent* gethostbyname2(const char *host,int AF) { 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 = gethostbyname2_r (host, AF,&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; }