
    i[                     R   d dl mZ d dl mZ d dlmZ  ej                     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Zd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ eZ  G d de!          Z" G d de"          Z# ej$        d          s G d de"e          Z%e%Zne#Z G d dej&                  Z' G d dej&                  Z( G d dej&                  Z) G d dej&                  Z*e+dk    r ej,                     dS dS )     )print_function)absolute_import)monkeyN)wraps)reraise)six)LARGE_TIMEOUT)support)paramstcp_listener)skipWithoutExternalNetwork)skipOnMacOnCI)Thread)Eventc                       e Zd ZdZd ZdS )
BaseThreadNc                 N     t                     fd            }| _        d S )Nc                  R    	  | i |S #  t          j                    _         xY wN)sysexc_infoterminal_exc)argskwargsselftargets     D/usr/local/lib/python3.11/dist-packages/gevent/tests/test__socket.pyerrors_are_fatalz-BaseThread.__init__.<locals>.errors_are_fatal+   s7    vt.v...$'LNN!s    &)r   r   )r   r   r   s   `` r   __init__zBaseThread.__init__*   s?    	v	 	 	 	 	 
	 '    )__name__
__module____qualname__r   r     r!   r   r   r   '   s(        L' ' ' ' 'r!   r   c                   "    e Zd ZddZd Zd ZdS )GreenletThreadNr%   c                 t    t                               | |           t          j        | j        g|R  | _        d S r   )r   r    geventspawnr   glet)r   r   r   s      r   r    zGreenletThread.__init__6   s7    D&)))L4t444			r!   c                 &     | j         j        |i |S r   )r+   join)r   r   r   s      r   r-   zGreenletThread.join:   s    ty~t.v...r!   c                 6    | j                                          S r   )r+   readyr   s    r   is_alivezGreenletThread.is_alive=   s    9??$$$$r!   )Nr%   )r"   r#   r$   r    r-   r1   r%   r!   r   r'   r'   4   sF        5 5 5 5/ / /% % % % %r!   r'   	threadingc                       e Zd Zd ZdS )ThreadThreadc                     |                     d          }t                              | |           t          j        | fd| j        i| |                                  d S )Nr   )popr   r    _Threadr   start)r   r   r   s      r   r    zThreadThread.__init__B   sZ    ZZ))Ff---T@@$+@@@@JJLLLLLr!   N)r"   r#   r$   r    r%   r!   r   r4   r4   A   s#        	 	 	 	 	r!   r4   c                   8    e Zd ZdZej        Zd                    d  ed          D                       Z	 e
e	e          se	                    d          Z	 fdZd Z	 	 d%dZd&d
Zd Zej        rd Z ed          d             Zd Zd Zd Zd Zd Zd ZdZddz  Z ej         d          d             Z!d Z"d Z#d Z$d Z% e&d          d             Z' e&d          d              Z(d! Z) e*j+         e,ed"          d#          d$             Z- xZ.S )'TestTCPNz, c                 ,    g | ]}t          |          S r%   )str).0xs     r   
<listcomp>zTestTCP.<listcomp>N   s    888a3q66888r!   i N  asciic                    t          t          |                                            dt          j        v r;g 	 ddlm n# t          $ r	 ddlm Y nw xY wfd| j        fd}|| _        nd | _	        |                     | 
                                          | _        | j                                        d         | _        d S )	Nz-vr   )perf_counter)timec                      s#t                                           d           t          d             z  g| R   d S )N   z
	 -> %0.6f)printappend)r   nowprinteds    r   logzTestTCP.setUp.<locals>.logZ   sM     &GGGNN1%%%mccee+3d333333r!   c                 D     d|            | ffd	} |           | S )NzRegistering for teardownc                 L     d|            |                                   d } d S )NzClosing on teardown)close)orJ   s    r   cz%TestTCP.setUp.<locals>.cot.<locals>.cc   s,    C-q111GGIIIAAAr!   r%   )rN   rO   rJ   orig_cots     r   cotzTestTCP.setUp.<locals>.cota   sK    .222       r!   c                      dS )zDoes nothingNr%   )_argss    r   rJ   zTestTCP.setUp.<locals>.logl   s      r!   rE   )superr:   setUpr   argvrC   rB   ImportError_close_on_teardownrJ   _setup_listenerlistenergetsocknameport)r   rQ   rJ   rH   rP   rI   	__class__s     @@@@r   rU   zTestTCP.setUpR   s.   gt""$$$38G-4444444 - - -,,,,,,,,-4 4 4 4 4 4 .H      '*D##   //0D0D0F0FGG M--//2			s   A AAc                     t                      S r   r   r0   s    r   rY   zTestTCP._setup_listener   s    ~~r!   c                    |                      t          j                              }|                    |pt          j        |p| j        f           ||                    |           ||                    |           |S r   )rX   socketconnectr   DEFAULT_CONNECTr\   
settimeoutsetblocking)r   hostr\   timeoutblockingsocks         r   create_connectionzTestTCP.create_connection   sx    &&v}77d4f4d6GdiHIIIOOG$$$X&&&r!   sendallc                    	
  j         
 
d|           g t                      		
 fd}t          |          }	  
d             j        di |}	                                  
d|dt          |                     	  t          ||          |          } 
d|            
d           t          |d	          r-	 |                                }n# t          t          f$ r Y nw xY w	 |                    t          j                   n# t          $ r Y nw xY w 
d
           |                                 n#  
d           t          |d	          r-	 |                                }n# t          t          f$ r Y nw xY w	 |                    t          j                   n# t          $ r Y nw xY w 
d
           |                                 w xY w	 |                    d           |                                rJ n0# |                    d           |                                rJ w xY w|j        rt%          |j          | j        }d                             d          |                    d          }                     d         |d                                         t                    t          |                                          |           d S )Nztest_sendall using methodc            
      
    dj                    j                                         \  } }	 |                     d          5 } d| d|                                             d                               |                                            d|dt          d	                              d d d            n# 1 swxY w Y   ~|                                  ~ d S # |                                  ~ w xY w)
Nz
	acceptingrbmodez#	accepted on server; client conn iszfile isz	readingz	done readingz	got bytesr   )rZ   acceptmakefilesetrG   readlenrM   )conn_raccepted_eventrJ   	read_datar   s      r   accept_and_readz.TestTCP._test_sendall.<locals>.accept_and_read   sV   Ct}---m**,,GD!
]]]-- MC>iQRSSS"&&(((C$$$$$QVVXX...C(![#il:K:KLLLM M M M M M M M M M M M M M M 

DD 

s0   C+ A6C<C+ CC+ CC+ +Dr   zcreating client connectionz%Client got accepted event from serverz; sending dataz$Client sent data: result from methodzClient will unwrap and shutdownunwrapzClient will close
   r      ,r%   )rJ   r   r   ri   waitrt   getattrhasattrr|   
ValueErrorOSErrorshutdownr`   	SHUT_RDWRrM   r-   r1   r   r   	long_datasplitassertEqual)r   data
match_dataclient_methodclient_argsrz   serverclientr>   rx   rJ   ry   s   `        @@@r   _test_sendallzTestTCP._test_sendall   s    h'777		 	 	 	 	 	 	 	  ///8	)C,---+T+::k::F" !!!C7AQSVW[S\S\]]] 2GFM22488:A>>>566668,, 

!'&0    
 OOF$45555   D '(((9 566668,, 

!'&0    
 OOF$45555   D '(((KKOOO(((((( KKOOO((((((((( 	*V())JaL&&t,,	%%d++
1z!}555YZ999J/////s   AH 	%E .H 
C H C30H 2C33H 7D H 
D$!H #D$$#H G!$E98G!9F
G!FG!F10G!1
F>;G!=F>>#G!!H -H>c                 :    |                      | j                   d S r   )r   r   r0   s    r   test_sendall_strzTestTCP.test_sendall_str   s    4>*****r!   c                 ^    |                      t          j        | j                             d S r   )r   r   	text_typer   r0   s    r   test_sendall_unicodezTestTCP.test_sendall_unicode   s(    s}T^<<=====r!   z3Sometimes fails for no apparent reason (buffering?)c                 d    t          j         d| j                  }|                     |           d S )NB)arrayr   r   r   r   s     r   test_sendall_arrayzTestTCP.test_sendall_array   s/    {3//4     r!   c                 6    d}|                      ||           d S )Nr!   r   r   s     r   test_sendall_emptyzTestTCP.test_sendall_empty   s#    4&&&&&r!   c                 :    d}|                      ||d           d S )Nr!   r}   rf   r   r   s     r   test_sendall_empty_with_timeoutz'TestTCP.test_sendall_empty_with_timeout   s(    4r22222r!   c                 :    d}|                      ||d           d S )Ns   hi
F)rg   r   r   s     r   test_sendall_nonblockingz TestTCP.test_sendall_nonblocking  s*    
 466666r!   c                 :    d}|                      ||d           d S )Nr!   send)r   r   r   s     r   test_empty_sendzTestTCP.test_empty_send
  s(    4V<<<<<r!   c                     d fd}t          |          }                                 }                     |                                          }t          |j        f          }t          j        d           |                    d           t          j        d           |                                 |                                 |	                                 |	                                 d S )Ni c                  P   j                                         \  } }                    |            t          | j        dz  f          }	 |                     d          }                    |d           |                                 d S # |                                 w xY w)N   tr   r   i     hello world)rZ   rp   rX   r   rj   recvr   r-   )remote_clientrv   senderresultNr   s       r   r   z'TestTCP.test_fullduplex.<locals>.server  s    #}3355M1##M222 =#8#'!80 0 0F&++D11  888s   +B B%r{   r   皙?r   )
r   ri   rX   rq   rs   rC   sleeprj   rM   r-   )r   r   server_threadr   client_fileclient_readerr   s   `     @r   test_fullduplexzTestTCP.test_fullduplex  s    	 	 	 	 	 	 f---''))--foo.?.?@@k&6aUCCC
3~&&&
3 	 	r!   c                      fd}t          |          }                                 }	 |                    d           t          j                    }                      j                  5  |                    d           d d d            n# 1 swxY w Y   t          j                    |z
  }                     |dd           |                                 d S # |                                 w xY w)Nc                  j    j                                         \  } }                    |            d S r   )rZ   rp   rX   ru   rv   r   s     r   rp   z)TestTCP.test_recv_timeout.<locals>.accept1  s6     m**,,GD!##D)))))r!   r{   rE   i   g?g?)	r   ri   rc   rC   assertRaisesTIMEOUT_ERRORr   assertTimeWithinRanger-   )r   rp   acceptorr   r8   tooks   `     r   test_recv_timeoutzTestTCP.test_recv_timeout0  s,   	* 	* 	* 	* 	* (((''))	a   IKKE""4#566 " "D!!!" " " " " " " " " " " " " " "9;;&D&&tWg>>>MMOOOOOHMMOOOOs0   AC .BC BC B0C C4Ts   helloi z2On Windows send() accepts whatever is thrown at itc                 
    g t           fd          }                                 }t          j        d           sJ |                    d           t          j                    }	                       j                  5  |                     j                   d d d            n# 1 swxY w Y    j	        r-t          j                    |z
  } 
                    |dd           |                                 |                                 d         d                                          d S # |                                 |                                 d         d                                          w xY w)Nc                  \                          j                                                  S r   )rG   rZ   rp   )client_sockr   s   r   <lambda>z.TestTCP.test_sendall_timeout.<locals>.<lambda>R  s#    ););DM<P<P<R<R)S)S r!   r{   r   g
ףp=
?gzG?r   )r   ri   rC   r   rc   r   r   rj   _test_sendall_data _test_sendall_timeout_check_timer   r-   rM   )r   r   r   r8   r   r   s   `    @r   test_sendall_timeoutzTestTCP.test_sendall_timeoutO  s   !S!S!S!S!STTT''))
3#			&""4#566 8 8t67778 8 8 8 8 8 8 8 8 8 8 8 8 8 84 =y{{U***4t<<<MMOOOLLNNNN1##%%%%% MMOOOLLNNNN1##%%%%s1   .D8 B/#D8 /B33D8 6B377D8 8A
Fc                      fd}t          |          }	                                  }|                    d          }|                                 |                                }                     |d                                |                                d           |                                 |                                 d S # |                                 w xY w)Nc                     j                                         \  } }|                     d          }|                    d           |                                 |                                 |                                  d S Nwbrn      hello
)rZ   rp   rq   writeflushrM   ru   rv   fdr   s      r   accept_oncez*TestTCP.test_makefile.<locals>.accept_onced  sj    m**,,GD!D))BHHZ   HHJJJHHJJJJJLLLLLr!   r{   rm   rn   r   r!   )r   ri   rq   rM   readliner   rs   r-   )r   r   r   r   r   lines   `     r   test_makefilezTestTCP.test_makefilec  s    	 	 	 	 	 ---
	++--F //t/44KLLNNN''))DT:...[--//555MMOOOOOHMMOOOOs   B$C C(c                      fd}t          |          }	                                  }|                    d           |                    d          }                      j        |j                   |                                 |                                 |                                 d S # |                                 w xY w)Nc                      j                                         \  } }	 t          j        d           |                                  d S # |                                  w xY w)Ng333333?)rZ   rp   rC   r   rM   r   s     r   r   z2TestTCP.test_makefile_timeout.<locals>.accept_once{  sO    m**,,GD!
3



s   A	 	Ar{   r   rm   rn   )	r   ri   rc   rq   r   r   r   rM   r-   )r   r   r   r   r   s   `    r   test_makefile_timeoutzTestTCP.test_makefile_timeouty  s    	 	 	 	 	 ---	++--Fc"""d++Bd0"+>>>LLNNNHHJJJMMOOOOOHMMOOOOs   BB5 5Cc                 D   t          j         t           j        t           j        d          }|                     |j        t           j                   |                     |j        t           j                   |                     d|j                   t          t           d          r|	                    d           |                     |j        t           j                   |
                    d            t          j        dd          t           j        t           j        d          }	 |
                    d           |                     |j        |j                   |                                 n# |                                 w xY w|                                 d S )Nr   SOCK_NONBLOCKrE   r`   )r`   AF_INET
SOCK_DGRAMassertIsfamilyr   typeprotor   rc   rd   r   get_originalrM   )r   s
std_sockets      r   test_attributeszTestTCP.test_attributes  sH   M&.&*;Q??ah///!2333AG$$$6?++ 
	#LLOOOMM!(FN333MM!@,Xx@@QWQbdeffJ#&&q)))  !&999  """"
  """"						s   )5E3 3F	c                 x   t          j         t           j        t           j                  }	 |                    d           |                    t
          j        t          j                    f          }| 	                    |t                     |                                 d S # |                                 w xY w)NF)r`   r   SOCK_STREAMrd   
connect_ex	greentestDEFAULT_LOCAL_HOST_ADDRr
   find_unused_portassertIsInstanceerrno_typesrM   )r   r   rets      r   *test_connect_ex_nonblocking_bad_connectionz2TestTCP.test_connect_ex_nonblocking_bad_connection  s    M&.&*<==	MM%   ,,	 A7C[C]C]^__C!!#{333GGIIIIIAGGIIIIs   A"B# #B9Tries to resolve hostnamec                 r   t          j         t           j        t           j                  }	 |                     t           j                  5  |                    dt          j                    f           d d d            n# 1 swxY w Y   |                                 d S # |                                 w xY wNzfoo.bar.fizzbuzz)	r`   r   r   r   gaierrorr   r
   r   rM   r   r   s     r   test_connect_ex_gaierrorz TestTCP.test_connect_ex_gaierror  s     M&.&*<==	""6?33 O O0'2J2L2LMNNNO O O O O O O O O O O O O O O GGIIIIIAGGIIIIs/   B  
)A?3B  ?BB  BB   B6c                      fd}t          j         t           j        t           j                  }                     t                    5  d |_        d d d            n# 1 swxY w Y   |                                  G d dt           j                   } |t           j        t           j                  } ||           d S )Nc                 "   	                      t          j                  5  |                     dt	          j                    f           d d d            n# 1 swxY w Y   |                                  d S # |                                  w xY wr   )r   r`   r   r   r
   r   rM   )rh   r   s    r   do_itz7TestTCP.test_connect_ex_not_call_connect.<locals>.do_it  s    &&v77 V VOO%79Q9S9S$TUUUV V V V V V V V V V V V V V V 



s.   A8 )AA8 AA8 AA8 8Bc                       e Zd Zd ZdS )3TestTCP.test_connect_ex_not_call_connect.<locals>.Sc                      t          d          )NzShould not be called)AssertionError)r   r   s     r   ra   z;TestTCP.test_connect_ex_not_call_connect.<locals>.S.connect  s    $%;<<<r!   N)r"   r#   r$   ra   r%   r!   r   Sr     s#        = = = = =r!   r   )r`   r   r   r   AttributeErrorra   rM   )r   r   r   r   s   `   r    test_connect_ex_not_call_connectz(TestTCP.test_connect_ex_not_call_connect  s   	 	 	 	 	 M&.&*<==~.. 	 	AI	 	 	 	 	 	 	 	 	 	 	 	 	 	 						= 	= 	= 	= 	= 	= 	= 	= Afnf011as   
AA"%A"c                    t          j         t           j        t           j                  }	 |                    d           |                     t
                    5  |                    t          j        df           d d d            n# 1 swxY w Y   |	                                 d S # |	                                 w xY w)NFi  )
r`   r   r   rd   r   OverflowErrorr   r   r   rM   r   s     r   $test_connect_ex_nonblocking_overflowz,TestTCP.test_connect_ex_nonblocking_overflow  s    M&.&*<==	MM%   ""=11 I Ii?GHHHI I I I I I I I I I I I I I I GGIIIIIAGGIIIIs/   /B) "B<B) BB) BB) )B?SOCK_CLOEXECzRequires SOCK_CLOEXECc                     t           j        }t          j         t           j        t           j        |z            } fd}t	          |          }	 |                    t          j         j        f           |	                    d          } 
                    |                                d           |                                 |                                 |                                 d S # |                                 w xY w)Nc                      j                                         \  } }|                     d          }|                    d           |                                 |                                  d S r   )rZ   rp   rq   r   rM   r   s      r   r   zATestTCP.test_connect_with_type_flags_ignored.<locals>.accept_once  s]    m**,,GD!D))BHHZ   HHJJJJJLLLLLr!   r{   rm   rn   r   )r`   r   r   r   r   ra   r   rb   r\   rq   r   r   rM   r-   )r   r   r   r   r   r   s   `     r   $test_connect_with_type_flags_ignoredz,TestTCP.test_connect_with_type_flags_ignored  s     *M&.&*<|*KLL	 	 	 	 	 ---	IIv-ty9:::&&BR[[]]J777HHJJJGGIIIMMOOOOOHMMOOOOs   BC2 2D)NNNN)Nrj   )/r"   r#   r$   __timeout__r`   rf   r   r-   ranger   
isinstancebytesencoderU   rY   ri   r   r   r   PY2r   r   r   r   r   r   r   r   r   r   r   r   skipOnWindowsr   r   r   r   r   r   r   r   r   unittest
skipUnlessr   r  __classcell__)r]   s   @r   r:   r:   K   s       KNM		8855<<88899I:i'' .$$W--	-3 -3 -3 -3 -3^   ?C#'   ]0 ]0 ]0 ]0~+ + + w >	> 	> 	> ]HII! ! JI!' ' '3 3 3
7 7 7= = =
  B  * (,$ "I- YQRR& & SR&&  ,  (  (     ;<<  =<   ;<<  =<0   X8802 2 2 2    r!   r:   c                   `    e Zd ZeZd Zd Zej         e	d          d                         Z
dS )TestCreateConnectionc                     t          j                    }|                     t          j        d          5  t          j        t          j        |ffddi| d d d            d S # 1 swxY w Y   d S )Nz5refused|not known|already in use|assign|not availablerf      )r
   r   assertRaisesRegexr`   errorri   r   DEFAULT_BIND_ADDR)r   	conn_argsconnect_ports      r   test_refusesz!TestCreateConnection.test_refuses  s    /11## H
 
 	 	 $,l;    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   !A""A&)A&c                 \    t          j                    }|                     d|f           d S )N )source_address)r
   r   r  )r   source_ports     r   test_refuses_from_portz+TestCreateConnection.test_refuses_from_port  s4    .00 	"k):;;;;;r!   r   c                 l    G d dt                      G fddt                    d }dd lm} |                     |j        t          j                   |j        }|j        }	 |_        ||_        |                               5  t          j        d           d d d            n# 1 swxY w Y   |                     dt          j	                             | 
                    j	        d         j                   d	_	        ||_        ||_        d S # d	_	        ||_        ||_        w xY w)
Nc                       e Zd ZdS )3TestCreateConnection.test_base_exception.<locals>.EN)r"   r#   r$   r%   r!   r   Er    s        Dr!   r  c                   2    e Zd ZdZdZfdZ fdZd ZdS )<TestCreateConnection.test_base_exception.<locals>.MockSocketr%   Fc                 *    xj         | fz  c_         d S r   )created)r   rv   
MockSockets     r   r    zETestCreateConnection.test_base_exception.<locals>.MockSocket.__init__$  s    ""tg-""""r!   c                      |          r   r%   )r   rv   r  s     r   ra   zDTestCreateConnection.test_base_exception.<locals>.MockSocket.connect'  s    add
r!   c                     d| _         d S )NT)closedr0   s    r   rM   zBTestCreateConnection.test_base_exception.<locals>.MockSocket.close*  s    "r!   N)r"   r#   r$   r"  r&  r    ra   rM   )r  r#  s   r   r#  r     s`        GF. . . . .    # # # # #r!   r#  c                      dgS )N)rE         r)     r%   )rv   s    r   mockgetaddrinfozATestCreateConnection.test_base_exception.<locals>.mockgetaddrinfo-  s    #%%r!   r   )re   r\   rE   r%   )BaseExceptionobjectgevent.socketr`   r   ri   getaddrinfor   rt   r"  
assertTruer&  )r   r+  gsocketorig_socketorig_getaddrinfor  r#  s        @@r   test_base_exceptionz(TestCreateConnection.test_base_exception  s   
	 	 	 	 	 	 	 		# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#	& 	& 	& 	('''''2F4LMMMn".	3'GN"1G""1%% ; ;()9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; QJ$6 7 7888OOJ.q18999 "$J(GN"2G "$J(GN"2G2222s1   )#D B-!D -B11D 4B15AD D3N)r"   r#   r$   r	   r  r  r  r   ignores_leakcheckr   r4  r%   r!   r   r  r    sm        K  .< < <   ;<<*3 *3 =< ! *3 *3 *3r!   r  c                   :    e Zd Zej        d             Zd Zd ZdS )TestFunctionsc                     ddl m}  G d dt                    }|                     |j                  5  |                     |            d           d d d            d S # 1 swxY w Y   d S )Nr   )r`   c                       e Zd ZdZd ZdS )+TestFunctions.test_wait_timeout.<locals>.ioNc                 .    t          j        d           d S )Nr}   )r)   r   )r   rS   s     r   r8   z1TestFunctions.test_wait_timeout.<locals>.io.startO  s    R     r!   )r"   r#   r$   callbackr8   r%   r!   r   ior:  L  s(        H! ! ! ! !r!   r=  g{Gz?r   )r)   r`   r-  r   rf   r   )r   r1  r=  s      r   test_wait_timeoutzTestFunctions.test_wait_timeoutG  s     	-,,,,,	! 	! 	! 	! 	! 	! 	! 	! w// 	- 	-LLtL,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s    A!!A%(A%c                 (   g }t           j        r?|                    d           |                    d           |                    d           t          j        d d         dk     r|                    d           |                     d|           d S )	Ngethostbynamegethostbyname_exgethostbyaddrr(  )r)     ri   r`   )exclude)r   PYPYrG   r   version_info!assertMonkeyPatchedFuncSignatures)r   rD  s     r   test_signatureszTestFunctions.test_signaturesV  s    > 	,
 NN?+++NN-...NN?+++BQB')) NN.///..x.IIIIIr!   c                 ,   ddl m j        j        s|                     d           t          j        d          s|                     d           d} G fddt                    }|                     |                    ||                     d S )	Nr   )_socketcommonz
Needs IPv6	inet_ptonzNeeds inet_pton)z2607:f8b0:4000:80e::200eP   r   	   c                       e Zd Z j        ZdS )6TestFunctions.test_resolve_ipv6_scope_id.<locals>.sockN)r"   r#   r$   AF_INET6r   )SCs   r   rh   rO  r  s        [FFFr!   rh   )	r)   rJ  
__socket__has_ipv6skipTestr   r-  r   _resolve_addr)r   addrrh   rQ  s      @r   test_resolve_ipv6_scope_idz(TestFunctions.test_resolve_ipv6_scope_idh  s    ......}% 	(MM,'''r}k22 	-MM+,,, 6	! 	! 	! 	! 	! 	! 	!6 	! 	! 	!dB,,T48899999r!   N)r"   r#   r$   r   r5  r>  rH  rW  r%   r!   r   r7  r7  E  sR         
- 
- ! 
-J J J$: : : : :r!   r7  c                        e Zd Zd Zd Zd ZdS )
TestSocketc                    t          j                     }|                                 |                     t           j                  5  |                    t           j                   d d d            d S # 1 swxY w Y   d S r   )r`   rM   r   r  r   r   r   s     r   test_shutdown_when_closedz$TestSocket.test_shutdown_when_closedx  s     MOO				v|,, 	) 	)JJv'(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s    A44A8;A8c                     dd l }t          j                    }	 |                    |          }|                     |           |                                 d S # |                                 w xY w)Nr   )weakrefr`   refassertIsNotNonerM   )r   r]  r   ws       r   test_can_be_weak_refzTestSocket.test_can_be_weak_ref  sa    MOO	AA  ###GGIIIIIAGGIIIIs   *A A/c                    t          j                     }	 |                     t                    5  t          |d           d d d            n# 1 swxY w Y   |                                 d S # |                                 w xY w)N__dict__)r`   r   r   r   rM   r   s     r   test_has_no_dictzTestSocket.test_has_no_dict  s    MOO	"">22 ' ':&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' GGIIIIIAGGIIIIs.   A- A A- AA- AA- -BN)r"   r#   r$   r[  ra  rd  r%   r!   r   rY  rY  v  sA        ) ) )      r!   rY  __main__)-
__future__r   r   r)   r   	patch_allr   r   r`   rC   r	  	functoolsr   gevent._compatr   gevent.testingtestingr   r   r	   r
   r   gevent.testing.socketsr   gevent.testing.skippingr   r   r2   r   r7   r   intr   r-  r   r'   is_module_patchedr4   TestCaser:   r  r7  rY  r"   mainr%   r!   r   <module>rr     s   % % % % % % & & & & & &            



            " " " " " " " " " " " "       ( ( ( ( ( ( " " " " " " ! ! ! ! ! ! / / / / / / > > > > > > 1 1 1 1 1 1 ( ' ' ' ' '      
' ' ' ' ' ' ' '
% 
% 
% 
% 
%Z 
% 
% 
%  v,, 	    z7    FFFf f f f fi  f f fRO3 O3 O3 O3 O39- O3 O3 O3b/: /: /: /: /:I& /: /: /:b    #   < zIN r!   