o
    2³cÏ	  ã                   @   s,   d dl Z d dlZdZd	dd„Zd
dd„ZdS )é    Né   Tc                 C   sX   t tj dd¡ƒ}t tj dd¡ƒ}|t ¡ krdS | r*tj dd¡ tj dd¡ |S )a`  
    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>`_

    Ú
LISTEN_FDSr   Ú
LISTEN_PIDN)ÚintÚosÚenvironÚgetÚgetpidÚpop)Úunset_environmentÚfdsÚ
listen_pid© r   úF/var/www/html/gps/gps/lib/python3.10/site-packages/gunicorn/systemd.pyÚ
listen_fds   s   r   Fc              	   C   sº   t j d¡}|du rdS zCz(t tjtjtjB ¡}|d dkr'd|dd…  }| |¡ | |  	d¡¡ W n   |j
dd	d
 Y W |rJt j d¡ | ¡  dS |rXt j d¡ | ¡  w )a  Send a notification to systemd. state is a string; see
    the man page of sd_notify (http://www.freedesktop.org/software/systemd/man/sd_notify.html)
    for a description of the allowable values.

    If the unset_environment parameter is True, sd_notify() will unset
    the $NOTIFY_SOCKET environment variable before returning (regardless of
    whether the function call itself succeeded or not). Further calls to
    sd_notify() will then fail, but the variable is no longer inherited by
    child processes.
    ÚNOTIFY_SOCKETNr   ú@ú é   zutf-8z$Exception while invoking sd_notify()T)Úexc_info)r   r   r   ÚsocketÚAF_UNIXÚ
SOCK_DGRAMÚSOCK_CLOEXECÚconnectÚsendallÚencodeÚdebugr
   Úclose)ÚstateÚloggerr   ÚaddrÚsockr   r   r   Ú	sd_notify1   s$   
€þ
r#   )T)F)r   r   ÚSD_LISTEN_FDS_STARTr   r#   r   r   r   r   Ú<module>   s
   
%