diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 413349b80119d61931ee48be2c5507c270c287b3..b2cb5286c7e0810aef31d271a6bb6dbd5cc7bfe2 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -1003,7 +1003,8 @@ static in_addr_t resolve_ip(const char *inaddr)
 	char*    p;
 	char*    addr;
 	char     buf[128];
-	HOSTENT* host;
+	struct addrinfo* res;
+	in_addr_t ipa = INADDR_NONE;
 
 	SAFECOPY(buf, inaddr);
 	addr = buf;
@@ -1019,15 +1020,15 @@ static in_addr_t resolve_ip(const char *inaddr)
 		if (*p != '.' && !IS_DIGIT(*p))
 			break;
 	if (!(*p))
-		return inet_addr(addr);
+		return parseIPv4Address(addr);
 
-	if ((host = gethostbyname(inaddr)) == NULL)
+	if (getaddrinfo(addr, NULL, NULL, &res) != 0)
 		return INADDR_NONE;
 
-	if (host->h_addr_list[0] == NULL)
-		return INADDR_NONE;
-
-	return *((in_addr_t*)host->h_addr_list[0]);
+	if (res->ai_family == AF_INET)
+		ipa = ((struct sockaddr_in*)res->ai_addr)->sin_addr.s_addr;
+	freeaddrinfo(res);
+	return ipa;
 }
 
 /****************************************************************************/
@@ -2788,7 +2789,7 @@ static int chk_received_hdr(SOCKET socket, const char* prot, const char *buf, IN
 			strncpy(ip, p, 16);
 			ip[15] = 0;
 			addr.in.sin_family = AF_INET;
-			addr.in.sin_addr.s_addr = inet_addr(ip);
+			addr.in.sin_addr.s_addr = parseIPv4Address(ip);
 			lprintf(LOG_DEBUG, "%04d %s DNSBL checking received header address %s [%s]", socket, prot, host_name, ip);
 		}
 
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 5d5ccaaef296a72d5628fc4c8be338b41ffca9bf..54069cb9249d243d8d26925b33465cdce46ee470 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -458,8 +458,9 @@ int close_socket(SOCKET sock)
 /* TODO: IPv6 */
 in_addr_t resolve_ip(char *addr)
 {
-	HOSTENT* host;
 	char*    p;
+	struct addrinfo* res;
+	in_addr_t ipa = INADDR_NONE;
 
 	if (*addr == 0)
 		return INADDR_NONE;
@@ -468,12 +469,15 @@ in_addr_t resolve_ip(char *addr)
 		if (*p != '.' && !IS_DIGIT(*p))
 			break;
 	if (!(*p))
-		return inet_addr(addr);
-	if ((host = gethostbyname(addr)) == NULL)
-		return INADDR_NONE;
-	if (host->h_addr_list[0] == NULL)
+		return parseIPv4Address(addr);
+
+	if (getaddrinfo(addr, NULL, NULL, &res) != 0)
 		return INADDR_NONE;
-	return *((in_addr_t*)host->h_addr_list[0]);
+
+	if (res->ai_family == AF_INET)
+		ipa = ((struct sockaddr_in*)res->ai_addr)->sin_addr.s_addr;
+	freeaddrinfo(res);
+	return ipa;
 }
 
 } /* extern "C" */
@@ -5921,8 +5925,10 @@ NO_SSH:
 				result = connect(new_node->passthru_socket, (struct sockaddr *)&tmp_addr, tmp_addr_len);
 
 				if (result != 0) {
+					char tmp[16];
 					lprintf(LOG_ERR, "Node %d !ERROR %d (%d) connecting to passthru socket: %s port %u"
-					        , new_node->cfg.node_num, result, SOCKET_ERRNO, inet_ntoa(tmp_addr.sin_addr), htons(tmp_addr.sin_port));
+					        , new_node->cfg.node_num, result, SOCKET_ERRNO
+					        , inet_ntop(AF_INET, &tmp_addr.sin_addr.s_addr, tmp, sizeof tmp), htons(tmp_addr.sin_port));
 					close_socket(new_node->passthru_socket);
 					new_node->passthru_socket = INVALID_SOCKET;
 					close_socket(tmp_sock);