summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Krick <frank.krick@gmail.com>2018-10-28 19:03:42 -0400
committerFrank Krick <frank.krick@gmail.com>2018-10-28 19:03:42 -0400
commit4887c74a9e4228ef69003eb0d3a59cc3abcbbaf6 (patch)
tree33606548e7088e4e90b37cd8c3c56d42b8c8756b
parentde0a6c1ef714ce42c07a595238663931a056a9b7 (diff)
downloadwaitress-4887c74a9e4228ef69003eb0d3a59cc3abcbbaf6.tar.gz
Removed bind_sockets parameter from adjustments and added autodetection if binding the socket should be skipped.
-rw-r--r--docs/arguments.rst8
-rw-r--r--waitress/adjustments.py8
-rw-r--r--waitress/server.py9
-rw-r--r--waitress/tests/test_adjustments.py22
-rw-r--r--waitress/tests/test_server.py2
5 files changed, 15 insertions, 34 deletions
diff --git a/docs/arguments.rst b/docs/arguments.rst
index dfdbc53..0b316ca 100644
--- a/docs/arguments.rst
+++ b/docs/arguments.rst
@@ -51,6 +51,14 @@ unix_socket_perms
Octal permissions to use for the Unix domain socket (string), default is
``600``. Only used if ``unix_socket`` is not ``None``.
+sockets
+ A list of sockets. The sockets can be internet or unix sockets and have to be bound.
+ If the socket list is not empty waitress creates one server for each socket.
+ Default is ``[]``.
+
+ .. warning::
+ May not be used with ``listen``, ``host`` and/or ``port`` or ``unix_socket``
+
threads
number of threads used to process application logic (integer), default
``4``
diff --git a/waitress/adjustments.py b/waitress/adjustments.py
index 92d5a4f..c92ba5b 100644
--- a/waitress/adjustments.py
+++ b/waitress/adjustments.py
@@ -112,7 +112,6 @@ class Adjustments(object):
('unix_socket', str),
('unix_socket_perms', asoctal),
('sockets', as_socket_list),
- ('bind_sockets', asbool),
)
_param_map = dict(_params)
@@ -227,10 +226,6 @@ class Adjustments(object):
# be used for e.g. socket activation
sockets = []
- # Enable binding to sockets by default. This can be turned off for sockets
- # that are supplied from the outside, e.g. using socket activation
- bind_sockets = True
-
def __init__(self, **kw):
if 'listen' in kw and ('host' in kw or 'port' in kw):
@@ -242,9 +237,6 @@ class Adjustments(object):
if 'sockets' in kw and ('host' in kw or 'port' in kw):
raise ValueError('host and or port may not be set if sockets is set.')
- if 'sockets' in kw and ('bind_sockets' not in kw or kw['bind_sockets']):
- raise ValueError('Sockets passed should be bound already, please turn bind of with bind_sockets=False')
-
for k, v in kw.items():
if k not in self._param_map:
raise ValueError('Unknown adjustment %r' % k)
diff --git a/waitress/server.py b/waitress/server.py
index ec12417..93430ac 100644
--- a/waitress/server.py
+++ b/waitress/server.py
@@ -85,8 +85,8 @@ def create_server(application,
effective_listen.append((last_serv.effective_host, last_serv.effective_port))
for sock in adj.sockets:
+ sockinfo = (sock.family, sock.type, sock.proto, sock.getsockname())
if sock.family == socket.AF_INET or sock.family == socket.AF_INET6:
- sockinfo = (sock.family, sock.type, sock.proto, sock.getsockname())
last_serv = TcpWSGIServer(
application,
map,
@@ -94,6 +94,7 @@ def create_server(application,
sock,
dispatcher=dispatcher,
adj=adj,
+ bind_socket=False,
sockinfo=sockinfo)
effective_listen.append((last_serv.effective_host, last_serv.effective_port))
elif hasattr(socket, 'AF_UNIX') and sock.family == socket.AF_UNIX:
@@ -104,7 +105,8 @@ def create_server(application,
sock,
dispatcher=dispatcher,
adj=adj,
- sockinfo=(sock.family, sock.type, sock.proto, sock.getsockname()))
+ bind_socket=False,
+ sockinfo=sockinfo)
effective_listen.append((last_serv.effective_host, last_serv.effective_port))
# We are running a single server, so we can just return the last server,
@@ -175,6 +177,7 @@ class BaseWSGIServer(wasyncore.dispatcher, object):
dispatcher=None, # dispatcher
adj=None, # adjustments
sockinfo=None, # opaque object
+ bind_socket=True,
**kw
):
if adj is None:
@@ -206,7 +209,7 @@ class BaseWSGIServer(wasyncore.dispatcher, object):
self.set_reuse_addr()
- if adj.bind_sockets:
+ if bind_socket:
self.bind_server_socket()
self.effective_host, self.effective_port = self.getsockname()
diff --git a/waitress/tests/test_adjustments.py b/waitress/tests/test_adjustments.py
index 05c4a23..64efcf0 100644
--- a/waitress/tests/test_adjustments.py
+++ b/waitress/tests/test_adjustments.py
@@ -239,23 +239,11 @@ class TestAdjustments(unittest.TestCase):
sockets = [
socket.socket(socket.AF_INET6, socket.SOCK_STREAM),
socket.socket(socket.AF_INET, socket.SOCK_STREAM)]
- inst = self._makeOne(sockets=sockets, bind_sockets=False)
+ inst = self._makeOne(sockets=sockets)
self.assertEqual(inst.sockets, sockets)
sockets[0].close()
sockets[1].close()
- def test_dont_use_sockets_with_bind_enabled(self):
- sockets = [
- socket.socket(socket.AF_INET6, socket.SOCK_STREAM),
- socket.socket(socket.AF_INET, socket.SOCK_STREAM)]
- self.assertRaises(
- ValueError,
- self._makeOne,
- sockets=sockets,
- bind_sockets=True)
- sockets[0].close()
- sockets[1].close()
-
def test_dont_mix_sockets_and_listen(self):
sockets = [socket.socket(socket.AF_INET, socket.SOCK_STREAM)]
self.assertRaises(
@@ -275,14 +263,6 @@ class TestAdjustments(unittest.TestCase):
sockets=sockets)
sockets[0].close()
- def test_default_bind_sockets(self):
- inst = self._makeOne()
- self.assertEqual(inst.bind_sockets, True)
-
- def test_good_bind_sockets(self):
- inst = self._makeOne(bind_sockets=False)
- self.assertEqual(inst.bind_sockets, False)
-
def test_badvar(self):
self.assertRaises(ValueError, self._makeOne, nope=True)
diff --git a/waitress/tests/test_server.py b/waitress/tests/test_server.py
index 38ee46d..53abd8e 100644
--- a/waitress/tests/test_server.py
+++ b/waitress/tests/test_server.py
@@ -62,7 +62,6 @@ class TestWSGIServer(unittest.TestCase):
_dispatcher=_dispatcher,
_start=_start,
_sock=_sock,
- bind_sockets=False,
sockets=_sockets)
return self.inst
@@ -321,7 +320,6 @@ if hasattr(socket, 'AF_UNIX'):
_dispatcher=_dispatcher,
_start=_start,
_sock=_sock,
- bind_sockets=False,
sockets=_sockets)
return self.inst