gethostbyname2.c raw

   1  #define _GNU_SOURCE
   2  
   3  #include <sys/socket.h>
   4  #include <netdb.h>
   5  #include <errno.h>
   6  #include <stdlib.h>
   7  
   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  }
  26