12345678910111213141516171819202122232425 |
- #define _GNU_SOURCE
- #include <sys/socket.h>
- #include <netdb.h>
- #include <errno.h>
- #include <stdlib.h>
- struct hostent *gethostbyname2(const char *name, 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 = gethostbyname2_r(name, af, h,
- (void *)(h+1), size-sizeof *h, &res, &h_errno);
- } while (err == ERANGE);
- return err ? 0 : h;
- }
|