summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert JW Regeer <bertjw@regeer.org>2016-10-14 15:59:25 -0600
committerBert JW Regeer <bertjw@regeer.org>2016-10-14 16:01:21 -0600
commit57ea8381ac0e95a3feff58655fade698e70f9eee (patch)
tree456cd8d9a92005f0be509367dd9d78745fa6f3ea
parentd10889694304e79ff52a61512e8b16948433be23 (diff)
downloadwaitress-bugfix/socket_flags_windows.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.py8
-rw-r--r--waitress/compat.py13
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