Parcourir la source

Add fix to libwebsocket to disable V6ONLY.

This was enabled by default on some systems (e.g. Windows).
Fabio Alessandrelli il y a 6 ans
Parent
commit
e3ddf12693

+ 2 - 0
thirdparty/README.md

@@ -272,6 +272,8 @@ File extracted from upstream source:
 - Also copy `win32helpers/` from `win32port/` inside `thirdparty/libwebsockets`
 - Also copy `win32helpers/` from `win32port/` inside `thirdparty/libwebsockets`
 - A fix has been added to allow building for 32-bits UWP, replacing `GetFileSize[Ex]` and `CreateFileW` with supported functions.
 - A fix has been added to allow building for 32-bits UWP, replacing `GetFileSize[Ex]` and `CreateFileW` with supported functions.
   There is a diff for this change in `thirdparty/libwebsockets/uwp_fixes.diff`
   There is a diff for this change in `thirdparty/libwebsockets/uwp_fixes.diff`
+- A fix to disable V6ONLY flag from IPv6 sockets (on by default on some systems) has been also applied.
+  The diff for this change can be found in `thirdparty/libwebsockets/ipv6_fixes.diff`
 
 
 Important: `lws_config.h` and `lws_config_private.h` contains custom
 Important: `lws_config.h` and `lws_config_private.h` contains custom
 Godot build configurations, check them out when updating.
 Godot build configurations, check them out when updating.

+ 32 - 0
thirdparty/libwebsockets/ipv6_fixes.diff

@@ -0,0 +1,32 @@
+diff --git a/thirdparty/libwebsockets/lib/plat/unix/unix-sockets.c b/thirdparty/libwebsockets/lib/plat/unix/unix-sockets.c
+index 693efd28e..192dddee6 100644
+--- a/thirdparty/libwebsockets/lib/plat/unix/unix-sockets.c
++++ b/thirdparty/libwebsockets/lib/plat/unix/unix-sockets.c
+@@ -73,6 +73,11 @@ lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt)
+ 	int optval = 1;
+ 	socklen_t optlen = sizeof(optval);
+ 
++#ifdef LWS_WITH_IPV6
++	optval = 0;
++	setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*)&optval, optlen);
++#endif
++
+ #if defined(__APPLE__) || \
+     defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
+     defined(__NetBSD__) || \
+diff --git a/thirdparty/libwebsockets/lib/plat/windows/windows-sockets.c b/thirdparty/libwebsockets/lib/plat/windows/windows-sockets.c
+index bf0935057..62a0a4984 100644
+--- a/thirdparty/libwebsockets/lib/plat/windows/windows-sockets.c
++++ b/thirdparty/libwebsockets/lib/plat/windows/windows-sockets.c
+@@ -56,6 +56,11 @@ lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd,
+ 	struct protoent *tcp_proto;
+ #endif
+ 
++#ifdef LWS_WITH_IPV6
++	optval = 0;
++	setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*)&optval, optlen);
++#endif
++
+ 	if (vhost->ka_time) {
+ 		/* enable keepalive on this socket */
+ 		optval = 1;

+ 5 - 0
thirdparty/libwebsockets/lib/plat/unix/unix-sockets.c

@@ -73,6 +73,11 @@ lws_plat_set_socket_options(struct lws_vhost *vhost, int fd, int unix_skt)
 	int optval = 1;
 	int optval = 1;
 	socklen_t optlen = sizeof(optval);
 	socklen_t optlen = sizeof(optval);
 
 
+#ifdef LWS_WITH_IPV6
+	optval = 0;
+	setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*)&optval, optlen);
+#endif
+
 #if defined(__APPLE__) || \
 #if defined(__APPLE__) || \
     defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
     defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
     defined(__NetBSD__) || \
     defined(__NetBSD__) || \

+ 5 - 0
thirdparty/libwebsockets/lib/plat/windows/windows-sockets.c

@@ -56,6 +56,11 @@ lws_plat_set_socket_options(struct lws_vhost *vhost, lws_sockfd_type fd,
 	struct protoent *tcp_proto;
 	struct protoent *tcp_proto;
 #endif
 #endif
 
 
+#ifdef LWS_WITH_IPV6
+	optval = 0;
+	setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (const void*)&optval, optlen);
+#endif
+
 	if (vhost->ka_time) {
 	if (vhost->ka_time) {
 		/* enable keepalive on this socket */
 		/* enable keepalive on this socket */
 		optval = 1;
 		optval = 1;