1#define _GNU_SOURCE
2
3#include <errno.h>
4#include <netdb.h>
5#include <stdlib.h>
6#include <sys/socket.h>
7
8struct hostent* gethostbyname2(const char* name, int af) {
9    static struct hostent* h;
10    size_t size = 63;
11    struct hostent* res;
12    int err;
13    do {
14        free(h);
15        h = malloc(size += size + 1);
16        if (!h) {
17            h_errno = NO_RECOVERY;
18            return 0;
19        }
20        err = gethostbyname2_r(name, af, h, (void*)(h + 1), size - sizeof *h, &res, &h_errno);
21    } while (err == ERANGE);
22    return err ? 0 : h;
23}
24