o
    ҷh*+                     @  s   d dl m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
mZ ddlT ddlmZmZmZ dd	lmZ er@d d
lmZ dddZdddZd ddZdddZdddZdddZdddZdddZdS )!    )annotationsN)TYPE_CHECKING   )_coresocket)*)assert_checkpointscheck_half_closeable_streamwait_all_tasks_blocked   )setsockopt_tests)SequencereturnNonec            	   
     sX  t  \} }| 3 |! tt t|  W d    n1 s!w   Y  W d    n1 s0w   Y  W d    n1 s?w   Y  tjtjd#}tjt	dd t| W d    n1 sbw   Y  W d    n1 sqw   Y  t \}}|% | t|}|j|u sJ W d    n1 sw   Y  W d    n1 sw   Y  t r}|
dI d H  |d t G}|| I d H  t|}|tjtjsJ |tjtjd |tjtjrJ |tjtjd}t|tsJ t| W d    n1 sw   Y  W d    d S W d    d S 1 s%w   Y  d S )Ntypez,^SocketStream requires a SOCK_STREAM socket$matchz	127.0.0.1r   r   F)stdlib_socket
socketpairpytestraises	TypeErrorSocketStreamtsocketr   
SOCK_DGRAM
ValueErrorbindlistenconnectgetsockname
getsockoptIPPROTO_TCPTCP_NODELAY
setsockopt
isinstancebytesr   )	stdlib_astdlib_bsockabslisten_sockclient_sockres r1   T/var/www/html/venv/lib/python3.10/site-packages/trio/_tests/test_highlevel_socket.pytest_SocketStream_basics   sT   
 
 



 $r3   c                    s>  d t  \} }|  |o t| t|d fdd}d fdd}t 4 I d H }|| || W d   I d H  n1 I d H sJw   Y  dI d H  d	I d H dkscJ  I d H  d	I d H d
ksvJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Ni r   r   c                    s*   t  } | I d H  | t 7 } d S N)	bytearraysend_allr'   )data)BIGr+   r1   r2   senderN   s   z*test_SocketStream_send_all.<locals>.senderc                    sJ   t  I d H  d} |  k r| t I d H 7 } |  k s|  ks#J d S )Nr   )r
   lenreceive_some)nbytes)r8   r,   r1   r2   receiverf   s   z,test_SocketStream_send_all.<locals>.receiver   e
       r   r   )	r   r   r   r   open_nursery
start_soonr6   r;   send_eof)a_sockb_sockr9   r=   nurseryr1   )r8   r+   r,   r2   test_SocketStream_send_allC   s"   
(PrH   r-   r   c              	     sr   d	 fdd}d
dd}t  4 I d H }|| ||| W d   I d H  d S 1 I d H s2w   Y  d S )Nr   r   c                     s   	   dd I d H  q)NT   xi'  )r6   r1   r-   r1   r2   r9   {   s   zfill_stream.<locals>.senderrG   _core.Nurseryc                   s   t  I d H  | j  d S r4   )r
   cancel_scopecancel)rG   r1   r1   r2   waiter   s   zfill_stream.<locals>.waiterrA   )rG   rK   r   r   )r   rB   rC   )r-   r9   rN   rG   r1   rJ   r2   fill_streamz   s   

.rO   c                    s.   ddd d fdd} t  | I d H  d S )Nr   !tuple[SocketStream, SocketStream]c                    s   t  \} }t| t|fS r4   )r   r   r   leftrightr1   r1   r2   stream_maker   s   z/test_SocketStream_generic.<locals>.stream_makerc                    s6     I d H \} }t | I d H  t |I d H  | |fS r4   )rO   rQ   rT   r1   r2   clogged_stream_maker   s
   z7test_SocketStream_generic.<locals>.clogged_stream_maker)r   rP   )r	   )rV   r1   rU   r2   test_SocketStream_generic   s   
rW   c               	     s"  t  +} | d | d tt t|  W d    n1 s$w   Y  W d    n1 s3w   Y  tjtj	d0} | dI d H  tjt
dd}t|  W d    n1 s^w   Y  |d W d    n1 srw   Y  tjdkrt 0} | dI d H  tjt
dd}t|  W d    n1 sw   Y  |d	 W d    n1 sw   Y  t }|dI d H  |d t|}|j|u sJ t }|| I d H  t  | I d H }W d    n1 sw   Y  t|tsJ |j | ksJ |j | ksJ t  | I d H  W d    n	1 s2w   Y  t  | I d H  W d    n	1 sMw   Y  t & ttj | I d H  W d    n	1 sow   Y  W d    n	1 sw   Y  |  | I d H  d S )
Nr   r?   r   z.^SocketListener requires a SOCK_STREAM socket$r   z.*SOCK_STREAMdarwinz,^SocketListener requires a listening socket$z.*listen)r   r   r   r   r   r   r   SocketListenerr   r   r   r   sysplatformr    r!   r   acceptr&   r   getpeernameacloser   ClosedResourceErrorclose)r-   excinfor.   listenerr/   server_streamr1   r1   r2   test_SocketListener   sv   







	
rd   c               	     s   t  } | dI d H  | d t| }|   t . tt	j
 | I d H  W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S )Nr   r?   )r   r   r   r   rY   r`   r   r   r   r   r_   r\   )r.   rb   r1   r1   r2   +test_SocketListener_socket_closed_underfoot   s   
"re   c               
     s  G dd dt j} | g }| ttjdttjdttjd|ttjdttjdttj	d|g}t
|}t  | I d H }|j|u sHJ W d    n1 sRw   Y  tjd	tjd
tj	di D ]=\}}t . tjt|d}| I d H  W d    n1 sw   Y  |jj|ksJ W d    n1 sw   Y  qdt  | I d H }|j|u sJ W d    d S 1 sw   Y  d S )Nc                   @  sz   e Zd ZdddZejZedd
dZed ddZ	d!d"ddZed#ddZ	ed$ddZ		d!d%ddZ	d&ddZ
dS )'z5test_SocketListener_accept_errors.<locals>.FakeSocketevents$Sequence[SocketType | BaseException]r   r   c                 S  s   t || _d S r4   )iter_events)selfrf   r1   r1   r2   __init__   s   z>test_SocketListener_accept_errors.<locals>.FakeSocket.__init__levelintoptnamec                S     d S r4   r1   )rj   rl   rn   r1   r1   r2   r"      s   z@test_SocketListener_accept_errors.<locals>.FakeSocket.getsockoptbuflenr'   c                S  ro   r4   r1   rj   rl   rn   rp   r1   r1   r2   r"         N
int | Noneint | bytesc                S  s   dS )NTr1   rq   r1   r1   r2   r"      rr   valueint | Bufferc                S  ro   r4   r1   )rj   rl   rn   ru   r1   r1   r2   r%      rr   z@test_SocketListener_accept_errors.<locals>.FakeSocket.setsockoptoptlenc                S  ro   r4   r1   rj   rl   rn   ru   rw   r1   r1   r2   r%   	     int | Buffer | Nonec                S  ro   r4   r1   rx   r1   r1   r2   r%     ry   tuple[SocketType, object]c                   s0   t  I d H  t| j}t|tr||d fS r4   )r   
checkpointnextri   r&   BaseException)rj   eventr1   r1   r2   r\     s   

z<test_SocketListener_accept_errors.<locals>.FakeSocket.accept)rf   rg   r   r   )rl   rm   rn   rm   r   rm   )rl   rm   rn   rm   rp   rm   r   r'   r4   )rl   rm   rn   rm   rp   rs   r   rt   )rl   rm   rn   rm   ru   rv   r   r   )
rl   rm   rn   rm   ru   r   rw   rm   r   r   )
rl   rm   rn   rm   ru   rz   rw   rs   r   r   )r   r{   )__name__
__module____qualname__rk   r   SOCK_STREAMr   overloadr"   r%   r\   r1   r1   r1   r2   
FakeSocket   s     
	
r   zConnection abortedzPermission deniedzBad protocolzOut of file descriptorsz$attempt to write to read-only memoryzout of buffersz$\[\w+ \d+\] Out of file descriptors$z1\[\w+ \d+\] attempt to write to read-only memory$z\[\w+ \d+\] out of buffers$r   )r   
SocketTypeOSErrorerrnoECONNABORTEDEPERMEPROTOEMFILEEFAULTENOBUFSrY   r   r\   r   itemsr   r   ru   )r   fake_server_sockfake_listen_sockrb   streamcoder   ra   r1   r1   r2   !test_SocketListener_accept_errors   sH   A






"r   c               	     s   t  \} }| K |0 |dI d H  |  t| }|dI d H dks)J |dI d H dks5J W d    n1 s?w   Y  W d    d S W d    d S 1 sWw   Y  d S )NrI   r   r@   )r   r   sendr`   r   r;   )sock_asock_br   r1   r1   r2   5test_socket_stream_works_when_peer_has_already_closedI  s   Pr   rA   )r-   r   r   r   )
__future__r   r   r   r   rZ   typingr   r    r   r   _highlevel_sockettestingr   r	   r
   test_socketr   collections.abcr   r3   rH   rO   rW   rd   re   r   r   r1   r1   r1   r2   <module>   s(    

,
7


;
f