mirror of
https://github.com/python/cpython
synced 2024-09-05 08:17:45 +00:00
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.
This commit is contained in:
parent
3b128c0548
commit
ecfff63e06
|
@ -465,9 +465,9 @@ def server_bind(self):
|
|||
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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue