diff options
author | Frank Krick <frank.krick@gmail.com> | 2018-10-28 19:03:42 -0400 |
---|---|---|
committer | Frank Krick <frank.krick@gmail.com> | 2018-10-28 19:03:42 -0400 |
commit | 4887c74a9e4228ef69003eb0d3a59cc3abcbbaf6 (patch) | |
tree | 33606548e7088e4e90b37cd8c3c56d42b8c8756b | |
parent | de0a6c1ef714ce42c07a595238663931a056a9b7 (diff) | |
download | waitress-4887c74a9e4228ef69003eb0d3a59cc3abcbbaf6.tar.gz |
Removed bind_sockets parameter from adjustments and added autodetection if binding the socket should be skipped.
-rw-r--r-- | docs/arguments.rst | 8 | ||||
-rw-r--r-- | waitress/adjustments.py | 8 | ||||
-rw-r--r-- | waitress/server.py | 9 | ||||
-rw-r--r-- | waitress/tests/test_adjustments.py | 22 | ||||
-rw-r--r-- | waitress/tests/test_server.py | 2 |
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 |