
    Tf                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ  G d de	          Z
 G d de
          Z G d de          Z G d	 d
e
          Zd ZddZddZd Zd ZdS )    N)utilc                   6    e Zd Zd	dZd Zd Zd
dZd Zd ZdS )
BaseSocketNc                 0   || _         || _        || _        |'t          j        | j        t          j                  }d}n;t          j        || j        t          j                  }t          j        |           d}| 	                    ||          | _
        d S )NFTbound)logconfcfg_addrsocketFAMILYSOCK_STREAMfromfdoscloseset_optionssock)selfaddressr
   r	   fdr   r   s          ?/var/www/html/env/lib/python3.11/site-packages/gunicorn/sock.py__init__zBaseSocket.__init__   s    	:=f.@AADEE=T[&2DEEDHRLLLE$$T$77			    c                 :    d| j                                         z  S )Nz<socket %d>)r   filenor   s    r   __str__zBaseSocket.__str__"   s    ty//1111r   c                 ,    t          | j        |          S N)getattrr   )r   names     r   __getattr__zBaseSocket.__getattr__%   s    ty$'''r   Fc                 P   |                     t          j        t          j        d           | j        j        r~t          t          d          ri	 |                     t          j        t          j        d           n<# t          j        $ r*}|j	        t          j
        t          j        fvr Y d }~nd }~ww xY w|s|                     |           |                    d           t          |d          r|                    d           |                    | j        j                   |S )N   SO_REUSEPORTr   set_inheritableT)
setsockoptr   
SOL_SOCKETSO_REUSEADDRr
   
reuse_porthasattrr%   errorerrnoENOPROTOOPTEINVALbindsetblockingr&   listenbacklog)r   r   r   errs       r   r   zBaseSocket.set_options(   s    )6+>BBBI  	FN33	 163FJJJJ<   9U%6$EEE FEEEE  	IIdOOO 4*++ 	'  &&&DI%&&&s   +A: :B3	 B..B3c                 :    |                     | j                   d S r   )r0   r   )r   r   s     r   r0   zBaseSocket.bind<   s    		$-     r   c                     | j         d S 	 | j                                          nD# t          j        $ r2}| j                            dt          |                     Y d }~nd }~ww xY wd | _         d S )NzError while closing socket %s)r   r   r   r,   r	   infostr)r   es     r   r   zBaseSocket.close?   s    9F	CIOO| 	C 	C 	CHMM93q66BBBBBBBB	C 			s   % A&(A!!A&r   F)	__name__
__module____qualname__r   r   r"   r   r0   r    r   r   r   r      sx        8 8 8 82 2 2( ( (   (! ! !	 	 	 	 	r   r   c                   4     e Zd Zej        Zd Zd fd	Z xZS )	TCPSocketc                 ~    | j         j        rd}nd}| j                                        }d||d         |d         fz  S )Nhttpshttpz
%s://%s:%dr   r$   )r
   is_sslr   getsockname)r   schemeaddrs      r   r   zTCPSocket.__str__O   sH    9 	FFFy$$&&vtAwQ888r   Fc                     |                     t          j        t          j        d           t	                                          ||          S )Nr$   r   )r'   r   IPPROTO_TCPTCP_NODELAYsuperr   )r   r   r   	__class__s      r   r   zTCPSocket.set_optionsX   s<    *F,>BBBww""4u"555r   r:   )	r;   r<   r=   r   AF_INETr   r   r   __classcell__rL   s   @r   r@   r@   K   sS        ^F9 9 96 6 6 6 6 6 6 6 6 6r   r@   c                   "    e Zd Zej        Zd ZdS )
TCP6Socketc                 L    | j                                         \  }}}}d||fz  S )Nzhttp://[%s]:%d)r   rE   )r   hostport_s       r   r   zTCP6Socket.__str__a   s-    !Y2244tQ4,..r   N)r;   r<   r=   r   AF_INET6r   r   r>   r   r   rQ   rQ   ]   s*        _F/ / / / /r   rQ   c                   :     e Zd Zej        Zd fd	Zd Zd Z xZ	S )
UnixSocketNc                 f   |	 t          j        |          }t          j        |j                  rt          j        |           nEt          d|z            # t          $ r&}|j        d         t          j	        k    r Y d }~nd }~ww xY wt                                          ||||           d S )Nz%r is not a socketr   r   )r   statS_ISSOCKst_moderemove
ValueErrorOSErrorargsr-   ENOENTrK   r   )r   rG   r
   r	   r   str9   rL   s          r   r   zUnixSocket.__init__j   s    :	BWT]]
 =,, BIdOOOO$%9D%@AAA    6!9,, -,,,, 	tSR00000s   A 
B	#BB	c                     d| j         z  S )Nzunix:%s)r   r   s    r   r   zUnixSocket.__str__x   s    4=((r   c                     t          j        | j        j                  }|                    | j                   t          j        | j        | j        j        | j        j                   t          j        |           d S r   )	r   umaskr
   r0   r   r   chownuidgid)r   r   	old_umasks      r   r0   zUnixSocket.bind{   s]    HTY_--			$-   
4=$)-???
r   r   )
r;   r<   r=   r   AF_UNIXr   r   r   r0   rN   rO   s   @r   rX   rX   f   sb        ^F1 1 1 1 1 1) ) )      r   rX   c                     t          | t                    r*t          j        | d                   rt          }n>t
          }n6t          | t          t          f          rt          }nt          d| z            |S )Nr   z Unable to create socket from: %r)

isinstancetupler   is_ipv6rQ   r@   r8   bytesrX   	TypeError)rG   	sock_types     r   
_sock_typers      sq    $ C<Q   	""II!II	D3,	'	' C		:TABBBr   c                    g }| j         }d |D             }|r|t          |          z  }d |D             }| j        r;t          j                            | j                  st          d| j        z            | j        r;t          j                            | j                  st          d| j        z            |rx|D ]s}t          j	        |t          j
        t          j                  }|                                }	t          |	          }
 |
|	| ||          }|                    |           t|S |D ]}t          |          }
d}t          d          D ] }	  |
|| |          } n# t          j        $ r}|j        d         t$          j        k    r#|                    d	t)          |                     |j        d         t$          j        k    r#|                    d
t)          |                     |dk     rod}|                    |                    t)          |          t)          |                               |                    d           t1          j        d           Y d}~d}~ww xY w|7|                    dt)          |                     t5          j        d           |                    |           |S )z
    Create a new socket for the configured addresses or file descriptors.

    If a configured address is a tuple then a TCP socket is created.
    If it is a string, a Unix socket is created. Otherwise, a TypeError is
    raised.
    c                 <    g | ]}t          |t                    |S r>   rm   int.0r0   s     r   
<listcomp>z"create_sockets.<locals>.<listcomp>   s'    ===tz$'<'<=d===r   c                 <    g | ]}t          |t                    |S r>   rv   rx   s     r   rz   z"create_sockets.<locals>.<listcomp>   s'    @@@d*T3*?*?@T@@@r   zcertfile "%s" does not existzkeyfile "%s" does not existrZ   N   r   zConnection in use: %szInvalid address: %sz$connection to {addr} failed: {error})rG   r,   zRetrying in 1 second.r$   zCan't connect to %s)r   listcertfiler   pathexistsr_   keyfiler   r   rk   r   rE   rs   appendranger,   ra   r-   
EADDRINUSEr8   EADDRNOTAVAILdebugformattimesleepsysexit)r
   r	   fds	listenersrG   fdaddrladdrr   r   	sock_namerr   listenerir9   msgs                  r   create_socketsr      s    I <D==t===F
 $s))@@d@@@E } IRW^^DM:: I7$-GHHH| GBGNN4<88 G6EFFF   	' 	'B=V^V5GHHD((**I"9--I yD#"===HX&&&&   t$$	q 	 	A ytS11  < 	" 	" 	"6!9 000II5s4yyAAA6!9 333II3SYY???q55@CIIcjjc$iis1vvjFFGGGII5666JqMMM	" <II+SYY777HQKKKs   E--I8<C1I33I8Tc                     | D ]V}|                                 }|                                 |r*t          |          t          u rt	          j        |           Wd S r   )rE   r   rs   rX   r   unlink)r   r   r   r   s       r   close_socketsr      sd     ! !$$&&	

 	!j++z99Ii   	! !r   c                 :      fd}                       |          S )Nc                      t          j        t           j        j        j                  } |                     j        j                   j        | _	        j
        r|                     j
                   | S )N)cafile)r~   r   )sslcreate_default_contextPurposeCLIENT_AUTHca_certsload_cert_chainr~   r   	cert_reqsverify_modeciphersset_ciphers)contextr
   s    r   default_ssl_context_factoryz0ssl_context.<locals>.default_ssl_context_factory   sk    ,S[-DT][[[MMM"n< 	.---r   )ssl_context)r
   r   s   ` r   r   r      s5         D"=>>>r   c                 b    t          |                              | d|j        |j                  S )NT)server_sidesuppress_ragged_eofsdo_handshake_on_connect)r   wrap_socketr   r   )r   r
   s     r   ssl_wrap_socketr      s;    t((59>B>WAEA] ) _ _ _r   r   )T)r-   r   r   r   r[   r   r   gunicornr   objectr   r@   rQ   rX   rs   r   r   r   r   r>   r   r   <module>r      sf    				  



  



       7 7 7 7 7 7 7 7t6 6 6 6 6
 6 6 6$/ / / / / / / /       8
 
 
> > > >B! ! ! !	? 	? 	?_ _ _ _ _r   