
    1hh4                     B   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrSSK	J
r
  SrSrSr\
R                  (       + r\R                   \R"                  4S jr\4S jrS	 rS
 r\" 5       rSqS rS r\" 5       r\ R8                  \SS.S j5       rS r0 rS r S r!S r"g)    N   )support	localhostz	127.0.0.1z::1c                     [         R                   " X5       n[        U5      nS S S 5        AU$ ! , (       d  f       AW$ = f)N)socket	bind_port)familysocktypetempsockports       C/opt/python-3.13.8/usr/lib/python3.13/test/support/socket_helper.pyfind_unused_portr      s;    p 
v	(H" 
)K 
)	(Ks   .
>c                    U R                   [        R                  :X  Ga  U R                  [        R                  :X  Ga   [        [        S5      (       aH  U R                  [        R                  [        R                  5      S:X  a  [        R                  " S5      e[        [        S5      (       aJ   U R                  [        R                  [        R                  5      S:X  a  [        R                  " S5      e [        [        S5      (       a/  U R                  [        R                  [        R                  S5        U R                  US45        U R!                  5       S   nU$ ! [         a     Nxf = f)NSO_REUSEADDR   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   Q   s&    {{fnn$f6H6H)H6>**v00&2E2EF!K(( *; < < 6>**	??6#4#4f6I6IJaO!,, .? @ @ P 6011OOF--v/I/I1MIItQia DK   	s   2AE' '
E43E4c                      U R                  U5        g ! [         a'    U R                  5         [        R                  " S5      ef = f)Nzcannot bind AF_UNIX sockets)r   PermissionErrorcloseunittestSkipTest)r   addrs     r   bind_unix_socketr'   x   s<    ?		$ ?

 =>>?s	    1Ac                     [         R                  (       ag  S n  [         R                   " [         R                  [         R                  5      n U R	                  [
        S45         U (       a  U R                  5         ggg! [         a     Of = f U (       a  U R                  5         g! U (       a  U R                  5         f f = f)Nr   TF)r   has_ipv6AF_INET6r   r   HOSTv6r#   r   )r   s    r   _is_ipv6_enabledr,      s    	==&2D2DEDIIvqk" 

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

 

 s$   A
A> >
BB' 
BB' 'Cc                    [        [        S5      (       d  [        R                  " S5      " U 5      $ [        cW  SSKJnJn  US-   n[        R                  " [        R                  5       n UR                  U5        SqU" U5         S S S 5        [        (       a%  S[        -  n[        R                  " U5      " U 5      $ U $ ! [         a  nUq S nANTS nAff = f! U" U5        f = f! , (       d  f       Nf= f)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_helperr/   r0   r.   r   r   )testr/   r0   pathr   emsgs          r   skip_unless_bind_unix_socketr9      s    69%%}}./55%-..]]6>>*d		$).& t + 58NN}}S!$''  +)*&+ t +*sB   *C(,C?C(
CCCCC
C%%C((
C6c                     [         R                  /n [        [         S5      (       a  U R                  [         R                  5        [        [         S5      (       a  U R                  [         R
                  5        [        [         S5      (       a  U R                  [         R                  5        [        (       d  U R                  [         R                  5        U $ )NENETUNREACHEADDRNOTAVAILEHOSTUNREACH)	errnoECONNREFUSEDr   appendr;   r<   r=   IPV6_ENABLEDEAFNOSUPPORT)errorss    r   get_socket_conn_refused_errsrD      s    
   !Fum$$e''(uo&& 	e))*un%%e(()<e(()M     )timeouterrnosc          	   #   8  ^^^^#    SS K mU[        L a  [        R                  n/ SQn/ SQn[        R                  " SU -  5      mUm/ mT(       dJ  U VVs/ s H  u  pV[        [        XV5      PM     snnmU VVs/ s H  u  pV[        [        XV5      PM     snnmUUUU4S jn[        R                  " 5       n Ub  [        R                  " U5        S v    [        R                  " U5        g s  snnf s  snnf ! [         ax  n	 U	R                  n
[        U
5      S:  a  [        U
S   [        5      (       a  U
S   n	O.[        U
5      S:  a  [        U
S   [        5      (       a  U
S   n	OOMi  U" U	5        e S n	A	ff = f! [        R                  " U5        f = f7f)Nr   ))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  > [        U SS 5      n[        U [        5      (       d  [        U [        R                  5      (       a  UT;   d  [        U TR
                  R                  5      (       a  SU R                  s=::  a  S::  d]  O  [        U TR
                  R                  5      (       a0  SU R                  ;   d&  SU R                  ;   d  SU R                  ;   d  UT;   aG  [        R                  (       d/  [        R                  R                  TR                  S   S-   5        TU eg )	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_error(transient_internet.<locals>.filter_error   s    C$'sL))V__--!z/V\\3344CHH##V\\2233+szz9!SZZ/+ ??

  Q$!67c! !rE   r   r   )urllib.error_NOT_SETr   INTERNET_TIMEOUTResourceDeniedr`   r>   r   getdefaulttimeoutsetdefaulttimeoutr   rl   lenra   )resource_namerG   rH   default_errnosdefault_gai_errnosnamenumrs   old_timeoutrm   aro   rp   rq   rr   s              @@@@r   transient_internetr      s     (**	N ##$B]$RSFOJ.<>.<{ #5$4.<> *<=);+4 fd0);=
" " **,K.$$W-( 	  -Y>=.   A1v{z!A$88d Q1AaD'!:!:d  	S& 	  -sO   AFC.1	F:C4"F9C: #F:
E<A3E77E<<E? ?FFc                  ^    [         R                  " SS[        R                  R                  S9$ )Ntest_python_z.sock)prefixsuffixdir)tempfilemktemposr6   curdirrF   rE   r   create_unix_domain_namer     s$     ??.!ww~~/ /rE   c           	      L    [         U    $ ! [         a     Of = fSSU /n[        R                  " U[        R                  [        R
                  SS9nUR                  (       a?  [        R                  " SR                  U5      < SUR                   35        S [         U '   g UR                  n [        UR                  5       5      nOQ! [         aD  n[        R                  " SSR                  U5      < SU< S	U< 35        S [         U '    S nAg S nAff = fU[         U '   U$ )
Nsysctlz-nT)stdoutrj   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$    
0C
 

D:DDc                  t    [         R                  R                  S5      (       d  g[        S5      n U c  gU S:g  $ )NfreebsdFznet.inet.tcp.blackholer   )ri   platform
startswithr   )r   s    r   tcp_blackholer   A  s9    <<""9-- 01E}QJrE   c                 P    [         R                  " [        5       S5      nU" U 5      $ )Nz8TCP blackhole is enabled (sysctl net.inet.tcp.blackhole))r$   skipIfr   )r5   skip_ifs     r   skip_if_tcp_blackholer   M  s$    ooBG 4=rE   )#
contextlibr>   os.pathr   r   ri   r   r   r$    r   HOSTHOSTv4r+   is_wasihas_gethostnamer   r   r   r   r'   r,   rA   r3   r9   rD   objectrv   contextmanagerr   r   r   r   r   r   rF   rE   r   <module>r      s        
    		 oo% #NNV5G5G ;z  %N?  !  .* 819" J. J.Z/  F	rE   