
    z%i5                     @   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Zddl	m
Z
 ddl	mZ dZdZdZe
j                   Zej"                  ej$                  fd	Zefd
Zd Zd Z e       Zdad Zd Z e       Ze j:                  eddd       Zd Zi Z d Z!d Z"d Z#y)    N   )support   )warnings_helper	localhostz	127.0.0.1z::1c                 z    	 t        j                   | |      5 }t        |      }d d d        ~|S # 1 sw Y   ~S xY w)N)socket	bind_port)familysocktypetempsockports       N/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/support/socket_helper.pyfind_unused_portr      sD    5n 
vx	( #H"#K#Ks   /:c                    	 | j                   t        j                  k(  r
| j                  t        j                  k(  rt        t        d      rF| j                  t        j                  t        j                        dk(  rt        j                  d      t        t        d      rH	 | j                  t        j                  t        j                        dk(  rt        j                  d      	 t        t        d      r/| j                  t        j                  t        j                  d       | j                  |df       | j!                         d   }|S # t        $ r Y rw xY w)NSO_REUSEADDRr   zHtests should never set the SO_REUSEADDR socket option on TCP/IP sockets!SO_REUSEPORTzHtests should never set the SO_REUSEPORT socket option on TCP/IP sockets!SO_EXCLUSIVEADDRUSEr   )r   r	   AF_INETtypeSOCK_STREAMhasattr
getsockopt
SOL_SOCKETr   r   
TestFailedr   OSError
setsockoptr   bindgetsockname)sockhostr   s      r   r
   r
   R   s"    {{fnn$f6H6H)H6>*v00&2E2EF!K(( *; < < 6>*	??6#4#4f6I6IJaO!,, .? @ @ P 601OOF--v/I/I1MIItQia DK   	s   $AE 	EEc                     	 	 | j                  |       y # t        $ r& | j                          t        j                  d      w xY w)Nzcannot bind AF_UNIX sockets)r   PermissionErrorcloseunittestSkipTest)r    addrs     r   bind_unix_socketr(   y   s?    L?		$ ?

 =>>?s	    /Ac                  ^   	 t         j                  rad } 	 t        j                   t         j                  t         j                        } | j	                  t
        df       	 | r| j                          yyy# t        $ r Y nw xY w	 | r| j                          y# | r| j                          w w xY w)Nr   TF)r	   has_ipv6AF_INET6r   r   HOSTv6r$   r   )r    s    r   _is_ipv6_enabledr-      s    5	==&2D2DEDIIvqk" 

   		

 

 s$   A	A4 4	B =B ?B  B B,c                    	 t        t        d      s t        j                  d      |       S t        Vddlm}m} |dz   }t        j                  t        j                        5 }	 |j                  |       da ||       	 d d d        t        r$dt        z  } t        j                  |      |       S | S # t        $ r}|aY d }~Md }~ww xY w#  ||       w xY w# 1 sw Y   ZxY w)NAF_UNIXzNo UNIX Socketsr   )TESTFNunlinkcan_bind_unix_socketFz%Requires a functional unix bind(): %s)r   r	   r%   skip_bind_nix_socket_error	os_helperr0   r1   r/   r   r   )testr0   r1   pathr    emsgs          r   skip_unless_bind_unix_socketr:      s    M69%/x}}./55%-..]]6>>* 	d		$).& t	 58NN!x}}S!$''  +)*&+ t	 	sB   #C%B58C5	C
>C CC

C
CCC#c                     	 t         j                  g} t        t         d      r| j                  t         j                         t        t         d      r| j                  t         j
                         t        t         d      r| j                  t         j                         t        s| j                  t         j                         | S )NENETUNREACHEADDRNOTAVAILEHOSTUNREACH)	errnoECONNREFUSEDr   appendr<   r=   r>   IPV6_ENABLEDEAFNOSUPPORT)errorss    r   get_socket_conn_refused_errsrE      s       !Fum$e''(uo& 	e))*un%e(()e(()M     )timeouterrnosc          	   #     K   	 t        j                  d      }dd l|t        u rt        j
                  }g d}g d}t	        j                  d| z        |g sH|D cg c]  \  }}t        t        ||       c}}|D cg c]  \  }}t        t        ||       c}}fd}t        j                         }		 |t        j                  |       d  	 t        j                  |	       y c c}}w c c}}w # |j                  $ rG}
t        j                  r/t        j                  j!                  j"                  d   dz          |
d }
~
wt$        $ rk}
	 |
j"                  }t'        |      dk\  rt)        |d   t$              r|d   }
n(t'        |      d	k\  rt)        |d   t$              r|d   }
nn\ ||
        d }
~
ww xY w# t        j                  |	       w xY ww)
Nnntplibr   ))r@   o   )
ECONNRESETh   )r>   q   )r<   e   )	ETIMEDOUTn   )r=   c   ))	EAI_AGAIN)EAI_FAIL)
EAI_NONAME)
EAI_NODATA)
WSANO_DATAi*  zResource %r is not availablec                 
   t        | dd       }t        | t              st        | t        j                        r|v st        | j
                  j                        rd| j                  cxk  rdk  sPn t        | j
                  j                        r*d| j                  v s d| j                  v sd| j                  v s|v rBt        j                  s/t        j                  j                  j                  d   dz          | y )	Nr?   i  iW  ConnectionRefusedErrorTimeoutErrorEOFErrorr   
)getattr
isinstancer_   r	   gaierrorerror	HTTPErrorcodeURLErrorreasonr   verbosesysstderrwriteargs)errncaptured_errnosdenied
gai_errnosurllibs     r   filter_errorz(transient_internet.<locals>.filter_error   s    C$'sL)V__-!z/V\\334CHH##V\\223+szz9!SZZ/+ ??

  Q$!67c! !rF   ra   r   r   )r   import_deprecatedurllib.error_NOT_SETr   INTERNET_TIMEOUTResourceDeniedrb   r?   r	   getdefaulttimeoutsetdefaulttimeoutNNTPTemporaryErrorrj   rk   rl   rm   rn   r   lenrc   )resource_namerH   rI   rK   default_errnosdefault_gai_errnosnamenumru   old_timeoutro   arq   rr   rs   rt   s               @@@@r   transient_internetr      s    G//	:G(**	N ##$B]$RSFOJ.<>*c #5$4 > *<=%4 fdC0 =
" **,K.$$W-0 	  -a>=. %% ??JJV[[^d23#  A1v{z!A$8d Q1AaD'!:d  	S& 	  -s\   AG'$C6?	G'C<# G'D  "G'G
AEG
A&GG

G G$$G'c                  d    	 t        j                  ddt        j                  j                        S )Ntest_python_z.sock)prefixsuffixdir)tempfilemktemposr7   curdirrG   rF   r   create_unix_domain_namer     s)     ??.!ww~~/ /rF   c           	      8   	 	 t         |    S # t        $ r Y nw xY wdd| g}t        j                  |t        j                  t        j
                  d      }|j                  r=t        j                  dj                  |      d|j                          d t         | <   y |j                  }	 t        |j                               }nL# t        $ r@}t        j                  ddj                  |      d|d	|       d t         | <   Y d }~y d }~ww xY w|t         | <   |S )
Nsysctlz-nT)stdoutrl   text z command failed with exit code zFailed to parse z command output z: )_sysctl_cacheKeyError
subprocessrunPIPESTDOUT
returncoder   print_warningjoinr   intstrip	Exception)r   cmdprocoutputvalueexcs         r   _get_sysctlr   $  s#   +T""  T4
 C>>#!+!+!2!2#%D # 1 2++/??*;= 	> #d[[FFLLN#  0#0A B006zC7D 	E #d  M$Ls$    	+C 	D6D		Dc                  h    t         j                  j                  d      syt        d      } | y| dk7  S )NfreebsdFznet.inet.tcp.blackholer   )rk   platform
startswithr   )r   s    r   tcp_blackholer   G  s6    <<""9- 01E}QJrF   c                 P    	 t        j                  t               d      } ||       S )Nz8TCP blackhole is enabled (sysctl net.inet.tcp.blackhole))r%   skipIfr   )r6   skip_ifs     r   skip_if_tcp_blackholer   S  s'    >ooBG 4=rF   )$
contextlibr?   os.pathr   r	   rk   r   r   r%    r   r   HOSTHOSTv4r,   is_wasihas_gethostnamer   r   r   r
   r(   r-   rB   r4   r:   rE   objectrx   contextmanagerr   r   r   r   r   r   rG   rF   r   <module>r      s        
     		 oo% #NNV5G5G ;z  %N?  !  .* 819" O. O.d/  F	rF   