diff options
author | Christian Heimes <christian@python.org> | 2022-03-11 22:25:14 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-11 22:25:14 (GMT) |
commit | ecfff63e06e77e22035a7f7caa26986f033f3aea (patch) | |
tree | 956166c47566051afd5f2c18bdc56863bc2f477c | |
parent | 3b128c054885fe881c3b57a5978de3ea89c81a9c (diff) | |
download | cpython-ecfff63e06e77e22035a7f7caa26986f033f3aea.zip cpython-ecfff63e06e77e22035a7f7caa26986f033f3aea.tar.gz cpython-ecfff63e06e77e22035a7f7caa26986f033f3aea.tar.bz2 |
bpo-40280: Disable AF_UNIX, AF_PACKET, SO_REUSE* on Emscripten (#31829)
Emscripten's socket emulation is limited. AF_UNIX, AF_PACKET, setsockopt(), and most SO_* constants are not supported.
-rw-r--r-- | Lib/socketserver.py | 4 | ||||
-rw-r--r-- | Modules/socketmodule.c | 2 | ||||
-rw-r--r-- | Modules/socketmodule.h | 15 | ||||
-rw-r--r-- | Tools/wasm/config.site-wasm32-emscripten | 6 |
4 files changed, 22 insertions, 5 deletions
diff --git a/Lib/socketserver.py b/Lib/socketserver.py index 5e070bc..30a5cfa 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -465,9 +465,9 @@ class TCPServer(BaseServer): May be overridden. """ - if self.allow_reuse_address: + if self.allow_reuse_address and hasattr(socket, "SO_REUSEADDR"): self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - if self.allow_reuse_port: + if self.allow_reuse_port and hasattr(socket, "SO_REUSEPORT"): self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) self.socket.bind(self.server_address) self.server_address = self.socket.getsockname() diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 3fca9f6..fbdd1a1 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -7933,7 +7933,7 @@ PyInit__socket(void) #ifdef IPPROTO_VRRP PyModule_AddIntMacro(m, IPPROTO_VRRP); #endif -#if defined(IPPROTO_SCTP) && !defined(__EMSCRIPTEN__) +#ifdef IPPROTO_SCTP PyModule_AddIntMacro(m, IPPROTO_SCTP); #endif #ifdef IPPROTO_BIP diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h index db26c04..1b35b11 100644 --- a/Modules/socketmodule.h +++ b/Modules/socketmodule.h @@ -192,6 +192,21 @@ typedef int socklen_t; #endif /* HAVE_SOCKADDR_ALG */ +#ifdef __EMSCRIPTEN__ +// wasm32-emscripten sockets only support subset of IPv4 and IPv6. +// SCTP protocol crashes runtime. +#ifdef IPPROTO_SCTP +# undef IPPROTO_SCTP +#endif +// setsockopt() fails with ENOPROTOOPT, getsockopt only supports SO_ERROR. +// undef SO_REUSEADDR and SO_REUSEPORT so they cannot be used. +#ifdef SO_REUSEADDR +# undef SO_REUSEADDR +#endif +#ifdef SO_REUSEPORT +# undef SO_REUSEPORT +#endif +#endif // __EMSCRIPTEN__ #ifndef Py__SOCKET_H #define Py__SOCKET_H diff --git a/Tools/wasm/config.site-wasm32-emscripten b/Tools/wasm/config.site-wasm32-emscripten index 5eaa793..2a60198 100644 --- a/Tools/wasm/config.site-wasm32-emscripten +++ b/Tools/wasm/config.site-wasm32-emscripten @@ -74,8 +74,10 @@ ac_cv_func_posix_fallocate=no ac_cv_func_utimensat=no ac_cv_header_sys_ioctl_h=no -# sockets are supported, but only in non-blocking mode -# ac_cv_header_sys_socket_h=no +# sockets are supported, but only AF_INET / AF_INET6 in non-blocking mode. +# Disable AF_UNIX and AF_PACKET support, see socketmodule.h. +ac_cv_header_sys_un_h=no +ac_cv_header_netpacket_packet_h=no # aborts with bad ioctl ac_cv_func_openpty=no |