blob: 63483a31f4a18965fc9d3298e32ebded875856e2 [file] [log] [blame]
Socket Activation
-----------------
While waitress does not support the various implementations of socket activation,
for example using systemd or launchd, it is prepared to receive pre-bound sockets
from init systems, process and socket managers, or other launchers that can provide
pre-bound sockets.
The following shows a code example starting waitress with two pre-bound Internet sockets.
.. code-block:: python
import socket
import waitress
def app(environ, start_response):
content_length = environ.get('CONTENT_LENGTH', None)
if content_length is not None:
content_length = int(content_length)
body = environ['wsgi.input'].read(content_length)
content_length = str(len(body))
start_response(
'200 OK',
[('Content-Length', content_length), ('Content-Type', 'text/plain')]
)
return [body]
if __name__ == '__main__':
sockets = [
socket.socket(socket.AF_INET, socket.SOCK_STREAM),
socket.socket(socket.AF_INET, socket.SOCK_STREAM)]
sockets[0].bind(('127.0.0.1', 8080))
sockets[1].bind(('127.0.0.1', 9090))
waitress.serve(app, sockets=sockets)
for socket in sockets:
socket.close()
Generally, to implement socket activation for a given init system, a wrapper
script uses the init system specific libraries to retrieve the sockets from
the init system. Afterwards it starts waitress, passing the sockets with the parameter
``sockets``. Note that the sockets have to be bound, which all init systems
supporting socket activation do.