1
0

gethostbyname2.c 523 B

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