
    i                        d Z ddlmZ ddlmZ ddlZej        d         dk    r ed           eZ	n G d de          Z	ddlZe	e_        dd	l
mZ  ej                     ddlmZ dd
lmZ ddlmZ 	 ddlmZ n# e$ r	 ddlmZ Y nw xY wddlmZ ddlZddlZddlZe	e_        dZej        redz  Zej        redz  Z G d de          Z G d de          Z  G d dej!                  Z"e#dk    r ej$                     dS dS )zjThis test checks that underlying socket instances (gevent.socket.socket._sock)
are not leaked by the hub.
    )print_function)socketN   r   c                       e Zd ZdZdS )Socketz"Something we can have a weakref toN)__name__
__module____qualname____doc__     F/usr/local/lib/python3.11/dist-packages/gevent/tests/test__refcount.pyr   r   &   s        ,,,,r   r   )monkey)support)params)start_new_thread)sleepg?   c                   ,    e Zd ZdZdZdZd Zd Zd ZdS )ServerFNc                     || _         t          j        t          j        t          j                  | _        	 t	          j        | j        t          j                  | _        d S #  | 	                                  xY wN)
raise_on_timeoutr   AF_INETSOCK_STREAMr   	bind_portr   DEFAULT_BIND_ADDRserver_portclose)selfr   s     r   __init__zServer.__init__O   s`     0mFNF4FGG	&0f>VWWD	JJLLLs   )A" "A9c                 F    | j                                          d | _         d S r   r   r   r    s    r   r   zServer.closeX   !    r   c                 @   	 | j                             t                     | j                             d           d| _        	 | j                                         \  }}n2# t           j        $ r  | j        r Y |                                  d S w xY w	 |	                    d          | _
        |                    d           |                                 n# |                                 w xY w	 |                                  d S # |                                  w xY w)N   Td      bye)r   
settimeoutSOCKET_TIMEOUTlisten	listeningaccepttimeoutr   r   recvclient_datasend)r    conn_s      r   handle_requestzServer.handle_request\   s   	K"">222Kq!!!!DN+,,..aa>   (  JJLLLLL
#'99S>> 		&!!!



JJLLLLLDJJLLLLsH   A D A  D  B7D BD /C D C--D D)	r   r	   r
   r-   r1   r   r!   r   r5   r   r   r   r   r   I   sP        IKK        r   r   c                   $    e Zd ZdZd Zd Zd ZdS )ClientNc                 p    t          j         t           j        t           j                  | _         || _        d S r   )r   r   r   r   )r    r   s     r   r!   zClient.__init__x   s(    mFNF4FGG&r   c                 F    | j                                          d | _         d S r   r#   r$   s    r   r   zClient.close}   r%   r   c                 *   	 | j                             t          j        | j        f           | j                             d           | j                             d          | _        |                                  d S # |                                  w xY w)N   hellor(   )	r   connectr   DEFAULT_CONNECTr   r2   r0   server_datar   r$   s    r   make_requestzClient.make_request   sy    	K!79I JKKKKX&&&#{//44DJJLLLLLDJJLLLLs   A$A< <B)r   r	   r
   r>   r!   r   r?   r   r   r   r7   r7   t   sF        K' ' '
      r   r7   c                   4    e Zd Zej        Zd Zd Zd Zd Z	dS )Testc                    t          |          }t          j        |j        j                  }d }t          |j                   |r(t          |j                  }t          |j	                   ||fD ]"}||j        t          d           |j        #|r6|                     |j        d           |                     |j        d           |S )N)r   g{Gz?r;   r)   )r   weakrefrefr   _sockr   r5   r7   r   r?   r   assertEqualr1   r>   )r    
run_clientserverwref_to_hidden_server_socketclientobjs         r   run_interactionzTest.run_interaction   s    444'.{6=3F'G'G$./// 	2F.//FV0111 6> 	 	C{*(d *(  	9V/:::V/888++r   c                    |                      |          }t          j                      |            rddlm} t           |t          j         |                                           t          j         |                      D ]J}t           ||                     t          j        |          D ]}t          d ||                     K|                     d           d S d S )N)rG   r   )pformat-z#server socket should be dead by now)	rL   	greentestgc_collect_if_neededpprintrN   printgcget_referrersfail)r    rG   rI   rN   xys         r   run_and_checkzTest.run_and_check   s   '+';';z';'R'R$&((('')) 	=&&&&&&''"*+G+G+I+IJJKKLLL%&B&B&D&DEE + +ggajj!!!)!,, + +A#wwqzz****+II;<<<<<	= 	=r   c                 Z    |                      d           |                      d           d S )NTrY   r$   s    r   test_clean_exitzTest.test_clean_exit   s0    4   4     r   c                 Z    |                      d           |                      d           d S )NFr[   r$   s    r   test_timeout_exitzTest.test_timeout_exit   s0    5!!!5!!!!!r   N)
r   r	   r
   rP   LARGE_TIMEOUT__timeout__rL   rY   r\   r^   r   r   r   rA   rA      sX        )K, , ,4
= 
= 
=! ! !" " " " "r   rA   __main__)%r   
__future__r   _socketr   c_socketsysversion_info
__import__r   geventr   	patch_allgevent.testingtestingrP   r   r   threadr   ImportError_threadtimer   rC   rT   _realsocketr+   RESOLVER_DNSPYTHONRUNNING_ON_CIobjectr   r7   TestCaserA   r   mainr   r   r   <module>rv      sb  ,  & % % % % % & & & & & & 



A! JxFF- - - - - - - -       +6+--- " " " " " " " " " " " " ! ! ! ! ! !)''''''' ) ) )(((((((()        				    aN aN( ( ( ( (V ( ( (V    V   ,/" /" /" /" /"9 /" /" /"d zIN s   3A: :BB