46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
|
# -*- coding: utf-8 -
|
||
|
#
|
||
|
# This file is part of gunicorn released under the MIT license.
|
||
|
# See the NOTICE for more information.
|
||
|
|
||
|
import os
|
||
|
|
||
|
SD_LISTEN_FDS_START = 3
|
||
|
|
||
|
|
||
|
def listen_fds(unset_environment=True):
|
||
|
"""
|
||
|
Get the number of sockets inherited from systemd socket activation.
|
||
|
|
||
|
:param unset_environment: clear systemd environment variables unless False
|
||
|
:type unset_environment: bool
|
||
|
:return: the number of sockets to inherit from systemd socket activation
|
||
|
:rtype: int
|
||
|
|
||
|
Returns zero immediately if $LISTEN_PID is not set to the current pid.
|
||
|
Otherwise, returns the number of systemd activation sockets specified by
|
||
|
$LISTEN_FDS.
|
||
|
|
||
|
When $LISTEN_PID matches the current pid, unsets the environment variables
|
||
|
unless the ``unset_environment`` flag is ``False``.
|
||
|
|
||
|
.. note::
|
||
|
Unlike the sd_listen_fds C function, this implementation does not set
|
||
|
the FD_CLOEXEC flag because the gunicorn arbiter never needs to do this.
|
||
|
|
||
|
.. seealso::
|
||
|
`<https://www.freedesktop.org/software/systemd/man/sd_listen_fds.html>`_
|
||
|
|
||
|
"""
|
||
|
fds = int(os.environ.get('LISTEN_FDS', 0))
|
||
|
listen_pid = int(os.environ.get('LISTEN_PID', 0))
|
||
|
|
||
|
if listen_pid != os.getpid():
|
||
|
return 0
|
||
|
|
||
|
if unset_environment:
|
||
|
os.environ.pop('LISTEN_PID', None)
|
||
|
os.environ.pop('LISTEN_FDS', None)
|
||
|
|
||
|
return fds
|