diff --git a/src/vdmodem/vdmodem.c b/src/vdmodem/vdmodem.c
index 903343ac485fee6439b6e046913ee342eec71eba..36edb74064b3e9c554ea23519a2fe165ed6c2793 100644
--- a/src/vdmodem/vdmodem.c
+++ b/src/vdmodem/vdmodem.c
@@ -356,13 +356,18 @@ const char* protocol(enum mode mode)
 	return "Raw";
 }
 
-int address_family()
+int address_family(BOOL for_listen)
 {
 	switch(cfg.address_family) {
 		case ADDRESS_FAMILY_INET:	return PF_INET;
 		case ADDRESS_FAMILY_INET6:	return PF_INET6;
 	}
-	return PF_UNSPEC;
+	return for_listen ? PF_INET : PF_UNSPEC;
+}
+
+int listen_address_family()
+{
+	return address_family(true);
 }
 
 int putcom(char* buf, size_t len)
@@ -582,14 +587,9 @@ char* dial(struct modem* modem, const char* number)
 	}
 	dprintf("Connecting to port %hu at host '%s' via %s", port, host, protocol(mode));
 	memset(&hints, 0, sizeof(hints));
-	hints.ai_flags=PF_UNSPEC;
-	hints.ai_family=address_family();
+	hints.ai_family = address_family(/* for listen: */false);
 	hints.ai_socktype=SOCK_STREAM;
 	hints.ai_protocol=IPPROTO_TCP;
-	hints.ai_flags=AI_NUMERICSERV;
-#ifdef AI_ADDRCONFIG
-	hints.ai_flags|=AI_ADDRCONFIG;
-#endif
 	dprintf("%s %d calling getaddrinfo", __FILE__, __LINE__);
 	SAFEPRINTF(portnum, "%hu", port);
 	int result = getaddrinfo(host, portnum, &hints, &res);
@@ -1073,7 +1073,7 @@ int main(int argc, char** argv)
 				cfg.listen = true;
 				arg++;
 				if(*arg != '\0') {
-					listening_interface.addr.sa_family = address_family();
+					listening_interface.addr.sa_family = listen_address_family();
 					if(inet_ptoaddr(arg, &listening_interface, sizeof(listening_interface)) == NULL) {
 						fprintf(stderr, "!Error parsing network address: %s", arg);
 						return EXIT_FAILURE;
@@ -1123,13 +1123,13 @@ int main(int argc, char** argv)
 		if(sock != INVALID_SOCKET)
 			listening_sock = sock;
 		else {
-			listening_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
+			listening_sock = socket(listen_address_family(), SOCK_STREAM, IPPROTO_IP);
 			if(listening_sock == INVALID_SOCKET) {
 				fprintf(stderr, "Error %ld creating socket\n", WSAGetLastError());
 				return EXIT_FAILURE;
 			}
 		}
-		listening_interface.addr.sa_family = address_family();
+		listening_interface.addr.sa_family = listen_address_family();
 		inet_setaddrport(&listening_interface, cfg.port);
 		result = bind(listening_sock, &listening_interface.addr, xp_sockaddr_len(&listening_interface));
 		if(result != 0) {