systemd.daemon — python-systemd 236 documentation

python-systemd · man pages · directives python-systemd 236

# Source code for systemd.daemon

    # SPDX-License-Identifier: LGPL-2.1-or-later

    from socket import AF_UNSPEC as _AF_UNSPEC

    from ._daemon import (__version__,
                          booted,
                          notify,
                          _listen_fds,
                          _listen_fds_with_names,
                          _is_fifo,
                          _is_socket,
                          _is_socket_inet,
                          _is_socket_sockaddr,
                          _is_socket_unix,
                          _is_mq,
                          LISTEN_FDS_START)

    def _convert_fileobj(fileobj):
        try:
            return fileobj.fileno()
        except AttributeError:
            return fileobj

    def is_fifo(fileobj, path=None):
        fd = _convert_fileobj(fileobj)
        return _is_fifo(fd, path)

    def is_socket(fileobj, family=_AF_UNSPEC, type=0, listening=-1):
        fd = _convert_fileobj(fileobj)
        return _is_socket(fd, family, type, listening)

    def is_socket_inet(fileobj, family=_AF_UNSPEC, type=0, listening=-1, port=0):
        fd = _convert_fileobj(fileobj)
        return _is_socket_inet(fd, family, type, listening, port)

    def is_socket_sockaddr(fileobj, address, type=0, flowinfo=0, listening=-1):
        """Check socket type, address and/or port, flowinfo, listening state.

        Wraps sd_is_socket_inet_sockaddr(3).

        `address` is a systemd-style numerical IPv4 or IPv6 address as used in
        ListenStream=. A port may be included after a colon (":").
        See systemd.socket(5) for details.

        Constants for `family` are defined in the socket module.
        """
        fd = _convert_fileobj(fileobj)
        return _is_socket_sockaddr(fd, address, type, flowinfo, listening)

    def is_socket_unix(fileobj, type=0, listening=-1, path=None):
        fd = _convert_fileobj(fileobj)
        return _is_socket_unix(fd, type, listening, path)

    def is_mq(fileobj, path=None):
        fd = _convert_fileobj(fileobj)
        return _is_mq(fd, path)

    def listen_fds(unset_environment=True):
        """Return a list of socket activated descriptors

        Example::

          (in primary window)
          $ systemd-socket-activate -l 2000 python3 -c \\
              'from systemd.daemon import listen_fds; print(listen_fds())'
          (in another window)
          $ telnet localhost 2000
          (in primary window)
          ...
          Execing python3 (...)
          [3]
        """
        num = _listen_fds(unset_environment)
        return list(range(LISTEN_FDS_START, LISTEN_FDS_START + num))

    def listen_fds_with_names(unset_environment=True):
        """Return a dictionary of socket activated descriptors as {fd: name}

        Example::

          (in primary window)
          $ systemd-socket-activate -l 2000 -l 4000 --fdname=2K:4K python3 -c \\
              'from systemd.daemon import listen_fds_with_names; print(listen_fds_with_names())'
          (in another window)
          $ telnet localhost 2000
          (in primary window)
          ...
          Execing python3 (...)
          [3]
        """
        composite = _listen_fds_with_names(unset_environment)
        retval = {}
        for i in range(0, composite[0]):
            retval[i+LISTEN_FDS_START] = composite[1+i]
        return retval