
    7\hk4                        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i Zd Zd Zd ZdS )    N   )support   )warnings_helper	localhostz	127.0.0.1z::1c                     	 t          j         | |          5 }t          |          }d d d            n# 1 swxY w Y   ~|S )N)socket	bind_port)familysocktypetempsockports       D/opt/python-3.11.14/usr/lib/python3.11/test/support/socket_helper.pyfind_unused_portr      s    5n 
vx	(	( #H""# # # # # # # # # # # # # # #Ks   377c                    	 | j         t          j        k    r| j        t          j        k    r t          t          d          rB|                     t          j        t          j                  dk    rt          j
        d          t          t          d          rT	 |                     t          j        t          j                  dk    rt          j
        d          n# t          $ r Y nw xY wt          t          d          r+|                     t          j        t          j        d           |                     |df           |                                 d         }|S )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
   P   sT    {fn$$f6H)H)H6>** 	<v0&2EFF!KK( *; < < < 6>** 
		??6#4f6IJJaOO!, .? @ @ @ P     	
 6011 	NOOF-v/I1MMMIItQia DKs   AC 
C+*C+c                     	 	 |                      |           d S # t          $ r) |                                  t          j        d          w xY w)Nzcannot bind AF_UNIX sockets)r   PermissionErrorcloseunittestSkipTest)r    addrs     r   bind_unix_socketr(   w   sW    L?		$ ? ? ?

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

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

  

5s$   AA1 1
A>;B =A>>B B2c                    	 t          t          d          s t          j        d          |           S t          ddlm}m} |dz   }t          j        t          j                  5 }	 |	                    |           dan# t          $ r}|aY d }~nd }~ww xY w ||           n#  ||           w xY w	 d d d            n# 1 swxY w Y   t          r'dt          z  } t          j        |          |           S | S )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:      si   M69%% 6/x}.//555%--------..]6>** 	d		$).&& + + +)*&&&&&&+ tt	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  58NN!x}S!!$'''sN   &C(B ?B% 
B
BB%BB%C%B22CC	Cc                     	 t           j        g} t          t           d          r|                     t           j                   t          t           d          r|                     t           j                   t          t           d          r|                     t           j                   t          s|                     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             #   p  
K   	 t          j        d          }dd l|t          u rt          j        }g d}g d}t	          j        d| z            |
g 
sd |D             
d |D             
fd}t          j                    }	 |t          j	        |           d V  n# |j
        $ rA}t          j        r-t          j                            j        d         d	z              |d }~wt           $ r}	 |j        }	t#          |	          dk    r$t%          |	d         t                     r	|	d         }n8t#          |	          dk    r$t%          |	d         t                     r	|	d         }nnw ||            d }~ww xY w	 t          j	        |           d S # t          j	        |           w xY 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                 @    g | ]\  }}t          t          ||          S rG   )getattrr?   .0namenums      r   
<listcomp>z&transient_internet.<locals>.<listcomp>   s8     > > >*c #5$44 > > >rF   c                 @    g | ]\  }}t          t          ||          S rG   )r^   r	   r_   s      r   rc   z&transient_internet.<locals>.<listcomp>   s8     = = =%4 fdC00 = = =rF   c                    t          | dd           }t          | t                    st          | t          j                  r|v sgt          | j        j                  rd| j        cxk    rdk    s;n t          | j        j                  rd| j	        v sd| j	        v sd| j	        v s|v r<t          j        s-t          j                            j        d         dz              | d S )	Nr?   i  iW  ConnectionRefusedErrorTimeoutErrorEOFErrorr   
)r^   
isinstancerg   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_--	"23z//V\344 3BCH########V\233 $+sz99!SZ//++  ? 8
  Q$!6777c! ! rF   ri   Tr   r   )r   import_deprecatedurllib.error_NOT_SETr   INTERNET_TIMEOUTResourceDeniedr	   getdefaulttimeoutsetdefaulttimeoutNNTPTemporaryErrorrq   rr   rs   rt   ru   r   lenrj   )resource_namerH   rI   rK   default_errnosdefault_gai_errnosr|   old_timeoutrv   arx   ry   rz   r{   s             @@@@r   transient_internetr      sJ     G/	::G(*	 	 	N   #$B]$RSSFOJ => >.<> > >= =);= = =
" " " " " " " " *,,K.$W---%   ? 	4JV[^d2333#   
	A1vv{{z!A$88{d Q1AaD'!:!:d
	 	S 	0 	 ----- ----s7   B) (F )
F3<C//F<BF  FF F5c           	      :   	 	 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	                    |          d|j                    d t           | <   d S |j
        }	 t          |                                          }nR# t          $ rE}t          j        dd	                    |          d|d	|           d t           | <   Y d }~d S d }~ww xY w|t           | <   |S )
Nsysctlz-nT)stdoutrs   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)ra   cmdprocoutputvalueexcs         r   _get_sysctlr     s   +T""    T4
 C>#!+!+!2#% % %D  # = =+/?= = 	> 	> 	> #dt[FFLLNN##    D# D D06D D<?D D 	E 	E 	E #dttttt  M$Ls$    
!B? ?
D	:D		Dc                  v    t           j                            d          sdS t          d          } | dS | dk    S )NfreebsdFznet.inet.tcp.blackholer   )rr   platform
startswithr   )r   s    r   tcp_blackholer   :  sC    <""9-- u 011E}uQJrF   c                 \    	 t          j        t                      d          } ||           S )Nz8TCP blackhole is enabled (sysctl net.inet.tcp.blackhole))r%   skipIfr   )r6   skip_ifs     r   skip_if_tcp_blackholer   F  s0    >oB G 74==rF   ) 
contextlibr?   r	   r   rr   r%    r   r   HOSTHOSTv4r,   is_wasihas_gethostnamer   r   r   r
   r(   r-   rB   r4   r:   rE   objectr   contextmanagerr   r   r   r   r   rG   rF   r   <module>r      s             



             		 o% #NV5G ; ; ; ;z  % % % %N? ? ?    !!    .  * 68819" O. O. O. O. O.f      F	 	 	    rF   