
    <|h                        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 ddlmZ ddlZddlZddlZe	e_        dZej8                  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jB                        Z"e#dk(  r ejH                          yy# e$ r	 ddlmZ Y w xY w)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y)Socketz"Something we can have a weakref toN)__name__
__module____qualname____doc__     Z/var/www/html/test/engine/venv/lib/python3.12/site-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y)ServerFNc                    || _         t        j                  t        j                  t        j                        | _        	 t	        j
                  | j                  t        j                        | _        y #  | j                           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mmFNNF4F4FG	&00f>V>VWD	JJLs    3A4 4Bc                 F    | j                   j                          d | _         y r   r   r   r    s    r   r   zServer.closeX       r   c                    	 | j                   j                  t               | j                   j                  d       d| _        	 | j                   j                         \  }}	 |j                  d      | _
        |j                  d       |j                          	 | j                          y # t         j                  $ r  | j                  r Y | j                          y w xY w# |j                          w xY w# | j                          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    	KK"">2KKq!!DN++,,.a#'99S> 		&!

JJL >> (( JJL 

JJLsB   AC6 B+ "'C! 	C6 + CC6 CC6 !C33C6 6D)	r   r	   r
   r-   r1   r   r!   r   r5   r   r   r   r   r   I   s     IKKr   r   c                   "    e Zd ZdZd Zd Zd Zy)ClientNc                     t        j                   t         j                  t         j                        | _         || _        y r   )r   r   r   r   )r    r   s     r   r!   zClient.__init__x   s&    mmFNNF4F4FG&r   c                 F    | j                   j                          d | _         y r   r#   r$   s    r   r   zClient.close}   r%   r   c                 0   	 | j                   j                  t        j                  | j                  f       | j                   j                  d       | j                   j                  d      | _        | j                          y # | j                          w xY w)N   hellor(   )	r   connectr   DEFAULT_CONNECTr   r2   r0   server_datar   r$   s    r   make_requestzClient.make_request   sf    	KK!7!79I9I JKKKX&#{{//4DJJLDJJLs   A0B B)r   r	   r
   r>   r!   r   r?   r   r   r   r7   r7   t   s    K'
r   r7   c                   <    e Zd Zej                  Zd Zd Zd Zd Z	y)Testc                    t        |      }t        j                  |j                  j                        }d }t        |j                         |r*t        |j                        }t        |j                         ||fD ]*  }||j                  t        d       |j                  , |r8| j                  |j                  d       | j                  |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'.{{6==3F3F'G$../F../FV001 6> 	C{**(d **(	 V//:V//8++r   c                    | j                  |      }t        j                           |       rddlm} t         |t        j                   |                          t        j                   |             D ]?  }t         ||             t        j                  |      D ]  }t        d ||              A | j                  d       y y )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$&&(')&'"**+G+IJKL%%&B&DE +gaj!))!, +A#wqz*++ II;< *r   c                 H    | j                  d       | j                  d       y )NTrY   r$   s    r   test_clean_exitzTest.test_clean_exit   s    4 4 r   c                 H    | j                  d       | j                  d       y )NFr[   r$   s    r   test_timeout_exitzTest.test_timeout_exit   s    5!5!r   N)
r   r	   r
   rP   LARGE_TIMEOUT__timeout__rL   rY   r\   r^   r   r   r   rA   rA      s!    ))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      s  , & & 
A! xF- -  +6++- " " !)'   	   aNaN(V (VV ,/"9 /"d zINN M  )()s   0C6 6DD