
    +h                         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y)    N)utilc                   4    e Zd ZddZd Zd Zd	dZd Zd Zy)

BaseSocketNc                 P   || _         || _        || _        |1t        j                  | j                  t        j
                        }d}nFt        j                  || j                  t        j
                        }t        j                  |       d}| j                  ||      | _
        y )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/venv/lib/python3.12/site-packages/gunicorn/sock.py__init__zBaseSocket.__init__   s~    	:==f.@.@ADE==T[[&2D2DEDHHRLE$$T$7	    c                 <    d| j                   j                         z  S )Nz<socket %d>)r   filenor   s    r   __str__zBaseSocket.__str__"   s    tyy//111r   c                 .    t        | j                  |      S N)getattrr   )r   names     r   __getattr__zBaseSocket.__getattr__%   s    tyy$''r   c                 v   |j                  t        j                  t        j                  d       | j                  j
                  r@t        t        d      r0	 |j                  t        j                  t        j                  d       |s| j                  |       |j                  d       t        |d      r|j                  d       |j                  | j                  j                          |S # t        j                  $ r7}|j                  t        j                  t        j                  fvr Y d }~d }~ww xY w)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II  FN3 1 163F3FJ IIdO 4*+  &DII%%& << 99U%6%6$EE Fs   /C. .D8-D33D8c                 :    |j                  | j                         y r   )r0   r   )r   r   s     r   r0   zBaseSocket.bind<   s    		$-- r   c                     | j                   y 	 | j                   j                          d | _         y # t        j                  $ r6}| j                  j                  dt        |             Y d }~d | _         y d }~ww xY w)NzError while closing socket %s)r   r   r   r,   r	   infostr)r   es     r   r   zBaseSocket.close?   se    99	CIIOO 	 || 	CHHMM93q6BB		Cs   1 A:%A55A:r   F)	__name__
__module____qualname__r   r   r"   r   r0   r    r   r   r   r      s     82((!	r   r   c                   >     e Zd Zej                  Zd Zd fd	Z xZS )	TCPSocketc                     | j                   j                  rd}nd}| j                  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   sE    99FFyy$$&vtAwQ888r   c                     |j                  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   s4    **F,>,>Bw"4u"55r   r:   )	r;   r<   r=   r   AF_INETr   r   r   __classcell__rL   s   @r   r@   r@   K   s    ^^F96 6r   r@   c                   *    e Zd Zej                  Zd Zy)
TCP6Socketc                 N    | j                   j                         \  }}}}d||fz  S )Nzhttp://[%s]:%d)r   rE   )r   hostport_s       r   r   zTCP6Socket.__str__a   s,    !YY224tQ4,..r   N)r;   r<   r=   r   AF_INET6r   r   r>   r   r   rQ   rQ   ]   s    __F/r   rQ   c                   D     e Zd Zej                  Zd fd	Zd Zd Z xZ	S )
UnixSocketc                 P   |Y	 t        j                  |      }t        j                  |j                        rt        j                  |       nt        d|z        t        | -  ||||       y # t        $ r+}|j                  d   t        j                  k7  r Y d }~Cd }~ww xY w)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WWT]
 ==,IIdO$%9D%@AAtSR0  66!9, -s   A1 1	B%:!B  B%c                      d| j                   z  S )Nzunix:%s)r   r   s    r   r   zUnixSocket.__str__x   s    4==((r   c                 H   t        j                  | j                  j                        }|j                  | j                         t        j                  | j                  | j                  j                  | j                  j                         t        j                  |       y r   )	r   umaskr
   r0   r   r   chownuidgid)r   r   	old_umasks      r   r0   zUnixSocket.bind{   sX    HHTYY__-			$-- 

4==$))--?
r   r   )
r;   r<   r=   r   AF_UNIXr   r   r   r0   rN   rO   s   @r   rX   rX   f   s    ^^F1)r   rX   c                     t        | t              r(t        j                  | d         rt        }|S t
        }|S t        | t        t        f      rt        }|S t        d| z        )Nr   z Unable to create socket from: %r)

isinstancetupler   is_ipv6rQ   r@   r8   bytesrX   	TypeError)rG   	sock_types     r   
_sock_typers      sh    $<<Q "I  "I
 	 
D3,	'	  :TABBr   c                    g }| j                   }|D cg c]  }t        |t              s| }}|r|t        |      z  }|D cg c]  }t        |t              r| }}| j                  rAt
        j                  j                  | j                        st        d| j                  z        | j                  rAt
        j                  j                  | j                        st        d| j                  z        |rt|D ]m  }t        j                  |t        j                  t        j                        }	|	j                         }
t        |
      } ||
| ||      }|j!                  |       o |S |D ]n  }t        |      }d}	t#        d      D ]  }	  ||| |      }	 n |	0|j%                  dt-        |             t9        j:                  d       |j!                  |	       p |S c c}w c c}w # t        j$                  $ r}|j&                  d   t(        j*                  k(  r|j%                  dt-        |             |j&                  d   t(        j.                  k(  r|j%                  dt-        |             |dk  r\d	}|j1                  |j3                  t-        |      t-        |      
             |j%                  d       t5        j6                  d       Y d}~Rd}~ww xY w)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.
    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   rm   int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   r0   fdaddrladdrr   r   	sock_namerr   listenerir9   msgs                   r   create_socketsr      sk    I <<D#=tz$'<d=F=
$s)"@d*T3*?T@E@ }}RWW^^DMM:7$--GHH||BGGNN4<<86EFF  	'B==V^^V5G5GHD((*I"9-I D#"=HX&	'   t$	q 	A tS1 	  <II+SY7HHQK/2 e > A8 << 	"66!9 0 00II5s4yA66!9 3 33II3SY?q5@CIIcjjc$is1vjFGII56JJqM	"s/   G$G$G)G)
G..K#CKK#c                     | D ]L  }|j                         }|j                          |s&t        |      t        u s8t	        j
                  |       N y r   )rE   r   rs   rX   r   unlink)r   r   r   r   s       r   close_socketsr      sC     !$$&	

j+z9IIi 	!r   c                 2      fd} j                   |      S )Nc                  8   t        j                  t         j                  j                  j                        } | j                  j                  j                         j                  | _	        j                  r| j                  j                         | S )N)cafile)rx   r{   )sslcreate_default_contextPurposeCLIENT_AUTHca_certsload_cert_chainrx   r{   	cert_reqsverify_modeciphersset_ciphers)contextr
   s    r   default_ssl_context_factoryz0ssl_context.<locals>.default_ssl_context_factory   sh    ,,S[[-D-DT]][M"nn<<-r   )ssl_context)r
   r   s   ` r   r   r      s     D"=>>r   c                 f    t        |      j                  | 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      s8    t((59>B>W>WAEA]A] ) _ _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      sk     	  
  
  7 7t6
 6$/ / 8
>B!	?_r   