diff options
author | Bert JW Regeer <bertjw@regeer.org> | 2016-10-14 15:59:25 -0600 |
---|---|---|
committer | Bert JW Regeer <bertjw@regeer.org> | 2016-10-14 16:01:21 -0600 |
commit | 57ea8381ac0e95a3feff58655fade698e70f9eee (patch) | |
tree | 456cd8d9a92005f0be509367dd9d78745fa6f3ea | |
parent | d10889694304e79ff52a61512e8b16948433be23 (diff) | |
download | waitress-57ea8381ac0e95a3feff58655fade698e70f9eee.tar.gz |
Add HAS_IPV6 to compatbugfix/socket_flags_windows
Disable IPv6 support if there is no IPv6 support on the platform
-rw-r--r-- | waitress/adjustments.py | 8 | ||||
-rw-r--r-- | waitress/compat.py | 13 |
2 files changed, 16 insertions, 5 deletions
diff --git a/waitress/adjustments.py b/waitress/adjustments.py index 2ee4cd5..1a56621 100644 --- a/waitress/adjustments.py +++ b/waitress/adjustments.py @@ -20,6 +20,7 @@ from waitress.compat import ( PY2, WIN, string_types, + HAS_IPV6, ) truthy = frozenset(('t', 'true', 'y', 'yes', 'on', '1')) @@ -228,10 +229,15 @@ class Adjustments(object): enabled_families = socket.AF_UNSPEC + if not self.ipv4 and not HAS_IPV6: # pragma: no cover + raise ValueError( + 'IPv4 is disabled but IPv6 is not available. Cowardly refusing to start.' + ) + if self.ipv4 and not self.ipv6: enabled_families = socket.AF_INET - if not self.ipv4 and self.ipv6: + if not self.ipv4 and self.ipv6 and HAS_IPV6: enabled_families = socket.AF_INET6 wanted_sockets = [] diff --git a/waitress/compat.py b/waitress/compat.py index 7704764..700f7a1 100644 --- a/waitress/compat.py +++ b/waitress/compat.py @@ -1,6 +1,7 @@ import sys import types import platform +import warnings try: import urlparse @@ -120,16 +121,20 @@ except AttributeError: # pragma: no cover # Python on Windows may not define IPPROTO_IPV6 in socket. import socket +HAS_IPV6 = socket.has_ipv6 + if hasattr(socket, 'IPPROTO_IPV6') and hasattr(socket, 'IPV6_V6ONLY'): IPPROTO_IPV6 = socket.IPPROTO_IPV6 IPV6_V6ONLY = socket.IPV6_V6ONLY else: # pragma: no cover - import os - if os.name == 'nt': + if WIN: IPPROTO_IPV6 = 41 IPV6_V6ONLY = 27 else: - raise RuntimeError( + warnings.warn( 'OS does not support required IPv6 socket flags. This is requirement ' - 'for Waitress. Please open an issue at https://github.com/Pylons/waitress' + 'for Waitress. Please open an issue at https://github.com/Pylons/waitress. ' + 'IPv6 support has been disabled.', + RuntimeWarning ) + HAS_IPV6 = False |