From d9f3a7946c2990635e3a9d010a6fb85655693dc7 Mon Sep 17 00:00:00 2001 From: Agent X <44549182+AgentXLP@users.noreply.github.com> Date: Wed, 10 Jul 2024 11:58:49 -0400 Subject: [PATCH] Make new IPv6 support only work on Windows to prevent direct connection breaking --- src/pc/network/socket/socket.c | 10 +++++++++- src/pc/network/socket/socket_linux.c | 10 +--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pc/network/socket/socket.c b/src/pc/network/socket/socket.c index 15f6a8fc..bbf759f0 100644 --- a/src/pc/network/socket/socket.c +++ b/src/pc/network/socket/socket.c @@ -22,7 +22,11 @@ void resolve_domain(void) { static int socket_bind(SOCKET socket, unsigned int port) { struct sockaddr_in rxAddr; +#if defined(_WIN32) || defined(_WIN64) rxAddr.sin_family = AF_INET6; +#else + rxAddr.sin_family = AF_INET; +#endif rxAddr.sin_port = htons(port); rxAddr.sin_addr.s_addr = htonl(INADDR_ANY); @@ -72,7 +76,6 @@ static int socket_receive(SOCKET socket, struct sockaddr_in* rxAddr, u8* buffer, } static bool ns_socket_initialize(enum NetworkType networkType, UNUSED bool reconnecting) { - // sanity check port unsigned int port = (networkType == NT_CLIENT) ? configJoinPort : configHostPort; if (port == 0) { port = DEFAULT_PORT; } @@ -100,7 +103,12 @@ static bool ns_socket_initialize(enum NetworkType networkType, UNUSED bool recon LOG_INFO("bound to port %u", port); } else { // save the port to send to +#if defined(_WIN32) || defined(_WIN64) sAddr[0].sin_family = AF_INET6; +#else + sAddr[0].sin_family = AF_INET; +#endif + sAddr[0].sin_port = htons(port); resolve_domain(); sAddr[0].sin_addr.s_addr = inet_addr(configJoinIp); diff --git a/src/pc/network/socket/socket_linux.c b/src/pc/network/socket/socket_linux.c index d478798a..5ab75ad0 100644 --- a/src/pc/network/socket/socket_linux.c +++ b/src/pc/network/socket/socket_linux.c @@ -5,7 +5,7 @@ SOCKET socket_initialize(void) { // initialize socket - SOCKET sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); + SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock == INVALID_SOCKET) { LOG_ERROR("socket failed with error %d", SOCKET_LAST_ERROR); return INVALID_SOCKET; @@ -17,14 +17,6 @@ SOCKET socket_initialize(void) { LOG_ERROR("fcntl failed with error: %d", rc); return INVALID_SOCKET; } - - // Make sure our socket is dual-stack. So we can use both IPv4 and IPv6. - int opt = 0; - rc = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&opt, sizeof(opt)); - if (rc != NO_ERROR) { - LOG_ERROR("setsockopt(IPV6_V6ONLY) failed with error: %d", rc); - return INVALID_SOCKET; - } return sock; }