Просмотр исходного кода

Move V6ONLY flag selection inside helpers

Fabio Alessandrelli 8 лет назад
Родитель
Сommit
4d90a4fcd5

+ 0 - 8
drivers/unix/packet_peer_udp_posix.cpp

@@ -127,14 +127,6 @@ Error PacketPeerUDPPosix::listen(int p_port, int p_recv_buffer_size) {
 	if (sock == -1 )
 		return ERR_CANT_CREATE;
 
-	if(ip_type == IP_Address::TYPE_IPV6) {
-		// Use IPv6 only socket
-		int yes = 1;
-		if(setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&yes, sizeof(yes)) != 0) {
-				WARN_PRINT("Unable to unset IPv4 address mapping over IPv6");
-		}
-	}
-
 	sockaddr_storage addr = {0};
 	size_t addr_size = _set_listen_sockaddr(&addr, p_port, ip_type, NULL);
 

+ 4 - 4
drivers/unix/socket_helpers.h

@@ -78,10 +78,10 @@ static int _socket_create(IP_Address::AddrType p_type, int type, int protocol) {
 	ERR_FAIL_COND_V( sockfd == -1, -1 );
 
 	if(family == AF_INET6) {
-		// Ensure IPv4 over IPv6 is enabled
-		int no = 0;
-		if(setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&no, sizeof(no)) != 0) {
-			WARN_PRINT("Unable to set IPv4 address mapping over IPv6");
+		// Select IPv4 over IPv6 mapping
+		int opt = p_type != IP_Address::TYPE_ANY;
+		if(setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&opt, sizeof(opt)) != 0) {
+			WARN_PRINT("Unable to set/unset IPv4 address mapping over IPv6");
 		}
 	}
 

+ 0 - 7
drivers/unix/tcp_server_posix.cpp

@@ -75,13 +75,6 @@ Error TCPServerPosix::listen(uint16_t p_port,const List<String> *p_accepted_host
 
 	ERR_FAIL_COND_V(sockfd == -1, FAILED);
 
-	if(ip_type == IP_Address::TYPE_IPV6) {
-		// Use IPv6 only socket
-		int yes = 1;
-		if(setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&yes, sizeof(yes)) != 0) {
-				WARN_PRINT("Unable to unset IPv4 address mapping over IPv6");
-		}
-	}
 #ifndef NO_FCNTL
 	fcntl(sockfd, F_SETFL, O_NONBLOCK);
 #else

+ 0 - 8
platform/windows/packet_peer_udp_winsock.cpp

@@ -119,14 +119,6 @@ Error PacketPeerUDPWinsock::listen(int p_port, int p_recv_buffer_size) {
 	if (sock == -1 )
 		return ERR_CANT_CREATE;
 
-	if(ip_type == IP_Address::TYPE_IPV6) {
-		// Use IPv6 only socket
-		int yes = 1;
-		if(setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&yes, sizeof(yes)) != 0) {
-				WARN_PRINT("Unable to unset IPv4 address mapping over IPv6");
-		}
-	}
-
 	struct sockaddr_storage addr = {0};
 	size_t addr_size = _set_listen_sockaddr(&addr, p_port, ip_type, NULL);
 

+ 0 - 8
platform/windows/tcp_server_winsock.cpp

@@ -69,14 +69,6 @@ Error TCPServerWinsock::listen(uint16_t p_port,const List<String> *p_accepted_ho
 	sockfd = _socket_create(ip_type, SOCK_STREAM, IPPROTO_TCP);
 	ERR_FAIL_COND_V(sockfd == INVALID_SOCKET, FAILED);
 
-	if(ip_type == IP_Address::TYPE_IPV6) {
-		// Use IPv6 only socket
-		int yes = 1;
-		if(setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&yes, sizeof(yes)) != 0) {
-				WARN_PRINT("Unable to unset IPv4 address mapping over IPv6");
-		}
-	}
-
 	unsigned long par = 1;
 	if (ioctlsocket(sockfd, FIONBIO, &par)) {
 		perror("setting non-block mode");