diff --git a/mongoose.c b/mongoose.c
index 0cacdfed47041443a106f27c13c412bf5064be2d..a560ca0aa766a74ff166917643bbfa2826549501 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -593,14 +593,28 @@ int ns_socketpair(sock_t sp[2]) {
 
 // TODO(lsm): use non-blocking resolver
 static int ns_resolve2(const char *host, struct in_addr *ina) {
-  struct hostent *he;
-  if ((he = gethostbyname(host)) == NULL) {
-    DBG(("gethostbyname(%s) failed: %s", host, strerror(errno)));
-  } else {
-    memcpy(ina, he->h_addr_list[0], sizeof(*ina));
-    return 1;
-  }
-  return 0;
+	int rv = 0;
+	struct addrinfo hints, *servinfo, *p;
+	struct sockaddr_in *h = NULL;
+	char *ip = malloc(17);
+	memset(ip, '\0', 17);
+
+	memset(&hints, 0, sizeof hints);
+	hints.ai_family = AF_INET;
+	hints.ai_socktype = SOCK_STREAM;
+
+	if((rv = getaddrinfo(host, NULL , NULL, &servinfo)) != 0) {
+		
+		return 0;
+	}
+
+	for(p = servinfo; p != NULL; p = p->ai_next) {
+		memcpy(&h, &p->ai_addr, sizeof(struct sockaddr_in *));
+		memcpy(ina, &h->sin_addr, sizeof(ina));
+	}
+
+	freeaddrinfo(servinfo);
+	return 1;
 }
 
 // Resolve FDQN "host", store IP address in the "ip".