HEX
Server: Apache/2.4.62 (Debian)
System: Linux MIA-VPS-VM01781 5.10.0-32-amd64 #1 SMP Debian 5.10.223-1 (2024-08-10) x86_64
User: webmaster (1001)
PHP: 8.2.29
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //lib/python3.7/asyncio/__pycache__/selector_events.cpython-37.pyc
B

U��ef��@sdZdZddlZddlZddlZddlZddlZddlZddlZyddl	Z	Wne
k
rddZ	YnXddlmZddlm
Z
ddlmZddlmZdd	lmZdd
lmZddlmZddlmZd
d�ZGdd�dej�ZGdd�dejej�ZGdd�de�ZGdd�de�ZdS)z�Event loop using a selector and related classes.

A selector is a "notify-when-ready" multiplexer.  For a subclass which
also includes support for signal handling, see the unix_events sub-module.
)�BaseSelectorEventLoop�N�)�base_events)�	constants)�events)�futures)�	protocols)�sslproto)�
transports)�loggercCs6y|�|�}Wntk
r"dSXt|j|@�SdS)NF)�get_key�KeyError�boolr)�selector�fdZevent�key�r�-/usr/lib/python3.7/asyncio/selector_events.py�_test_selector_events
rcs�eZdZdZdQ�fdd�	ZdRddd�dd�ZdSddddejd	�d
d�ZdTdd
�Z	�fdd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdddejfdd�Zdddejfdd�Zddejfdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*�Z+S)UrzJSelector event loop.

    See events.EventLoop for API specification.
    NcsFt���|dkrt��}t�d|jj�||_|�	�t
��|_dS)NzUsing selector: %s)
�super�__init__�	selectorsZDefaultSelectorr�debug�	__class__�__name__�	_selector�_make_self_pipe�weakrefZWeakValueDictionary�_transports)�selfr)rrrr0s
zBaseSelectorEventLoop.__init__)�extra�servercCst||||||�S)N)�_SelectorSocketTransport)r�sock�protocol�waiterr r!rrr�_make_socket_transport:s
z,BaseSelectorEventLoop._make_socket_transportF)�server_side�server_hostnamer r!�ssl_handshake_timeoutc	Cs0tj|||||||	d�}
t|||
||d�|
jS)N)r))r r!)r	ZSSLProtocolr"Z_app_transport)rZrawsockr$�
sslcontextr%r'r(r r!r)Zssl_protocolrrr�_make_ssl_transport?s
z)BaseSelectorEventLoop._make_ssl_transportcCst||||||�S)N)�_SelectorDatagramTransport)rr#r$�addressr%r rrr�_make_datagram_transportLsz.BaseSelectorEventLoop._make_datagram_transportcsL|��rtd��|��rdS|��t���|jdk	rH|j��d|_dS)Nz!Cannot close a running event loop)Z
is_running�RuntimeError�	is_closed�_close_self_piper�closer)r)rrrr2Qs


zBaseSelectorEventLoop.closecCsB|�|j���|j��d|_|j��d|_|jd8_dS)Nr)�_remove_reader�_ssock�filenor2�_csock�
_internal_fds)rrrrr1\s

z&BaseSelectorEventLoop._close_self_pipecCsNt��\|_|_|j�d�|j�d�|jd7_|�|j��|j�dS)NFr)	�socketZ
socketpairr4r6�setblockingr7�_add_readerr5�_read_from_self)rrrrrds
z%BaseSelectorEventLoop._make_self_pipecCsdS)Nr)r�datarrr�_process_self_datalsz(BaseSelectorEventLoop._process_self_datacCsVxPy |j�d�}|sP|�|�Wqtk
r8wYqtk
rLPYqXqWdS)Ni)r4�recvr=�InterruptedError�BlockingIOError)rr<rrrr;osz%BaseSelectorEventLoop._read_from_selfcCsJ|j}|dk	rFy|�d�Wn(tk
rD|jr@tjddd�YnXdS)N�z3Fail to write a null byte into the self-pipe socketT)�exc_info)r6�send�OSError�_debugrr)rZcsockrrr�_write_to_self{sz$BaseSelectorEventLoop._write_to_self�dc
Cs"|�|��|j||||||�dS)N)r:r5�_accept_connection)r�protocol_factoryr#r*r!�backlogr)rrr�_start_serving�s
z$BaseSelectorEventLoop._start_servingc
Cs�x�t|�D]�}y0|��\}}	|jr4t�d||	|�|�d�Wn�tttfk
rZdSt	k
r�}
z^|
j
t
jt
jt
j
t
jfkr�|�d|
|d��|�|���|�tj|j||||||�n�Wdd}
~
XYqXd|	i}|�||||||�}|�|�qWdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)�message�	exceptionr8�peername)�range�acceptrErrr9r@r?�ConnectionAbortedErrorrD�errnoZEMFILEZENFILEZENOBUFSZENOMEM�call_exception_handlerr3r5Z
call_laterrZACCEPT_RETRY_DELAYrK�_accept_connection2Zcreate_task)
rrIr#r*r!rJr)�_�conn�addr�excr rPrrrrH�s6



z(BaseSelectorEventLoop._accept_connectionc
�s�d}d}yl|�}|��}	|r8|j||||	d|||d�}n|j|||	||d�}y|	IdHWn|���YnXWn\tk
r�}
z>|jr�d|
d�}|dk	r�||d<|dk	r�||d<|�|�Wdd}
~
XYnXdS)NT)r%r'r r!r))r%r r!z3Error on transport creation for incoming connection)rLrMr$�	transport)�
create_futurer+r&r2�	ExceptionrErS)rrIrVr r*r!r)r$rYr%rX�contextrrrrT�s6
z)BaseSelectorEventLoop._accept_connection2c
Cs�|}t|t�sJyt|���}Wn*tttfk
rHtd|���d�YnXy|j|}Wntk
rlYnX|��s�t	d|�d|����dS)NzInvalid file object: zFile descriptor z is used by transport )
�
isinstance�intr5�AttributeError�	TypeError�
ValueErrorrr
�
is_closingr/)rrr5rYrrr�_ensure_fd_no_transport�s
z-BaseSelectorEventLoop._ensure_fd_no_transportc		Gs�|��t�|||d�}y|j�|�}Wn*tk
rR|j�|tj|df�Yn>X|j|j	}\}}|j�
||tjB||f�|dk	r�|��dS)N)�
_check_closedr�Handlerrr
�registerr�
EVENT_READr<�modify�cancel)	rr�callback�args�handler�mask�reader�writerrrrr:�s
z!BaseSelectorEventLoop._add_readercCs�|��rdSy|j�|�}Wntk
r0dSX|j|j}\}}|tjM}|sb|j�|�n|j�	||d|f�|dk	r�|�
�dSdSdS)NFT)r0rrr
rr<rrg�
unregisterrhri)rrrrmrnrorrrr3sz$BaseSelectorEventLoop._remove_readerc		Gs�|��t�|||d�}y|j�|�}Wn*tk
rR|j�|tjd|f�Yn>X|j|j	}\}}|j�
||tjB||f�|dk	r�|��dS)N)rdrrerrr
rfr�EVENT_WRITEr<rhri)	rrrjrkrlrrmrnrorrr�_add_writers
z!BaseSelectorEventLoop._add_writercCs�|��rdSy|j�|�}Wntk
r0dSX|j|j}\}}|tjM}|sb|j�|�n|j�	|||df�|dk	r�|�
�dSdSdS)zRemove a writer callback.FNT)r0rrr
rr<rrqrprhri)rrrrmrnrorrr�_remove_writer*sz$BaseSelectorEventLoop._remove_writercGs|�|�|j||f|��S)zAdd a reader callback.)rcr:)rrrjrkrrr�
add_readerAs
z BaseSelectorEventLoop.add_readercCs|�|�|�|�S)zRemove a reader callback.)rcr3)rrrrr�
remove_readerFs
z#BaseSelectorEventLoop.remove_readercGs|�|�|j||f|��S)zAdd a writer callback..)rcrr)rrrjrkrrr�
add_writerKs
z BaseSelectorEventLoop.add_writercCs|�|�|�|�S)zRemove a writer callback.)rcrs)rrrrr�
remove_writerPs
z#BaseSelectorEventLoop.remove_writerc�s<|jr|��dkrtd��|��}|�|d||�|IdHS)z�Receive data from the socket.

        The return value is a bytes object representing the data received.
        The maximum amount of data to be received at once is specified by
        nbytes.
        rzthe socket must be non-blockingN)rE�
gettimeoutrarZ�
_sock_recv)rr#�n�futrrr�	sock_recvUs
zBaseSelectorEventLoop.sock_recvcCs�|dk	r|�|�|��rdSy|�|�}Wn`ttfk
rb|��}|�||j||||�Yn6tk
r�}z|�	|�Wdd}~XYnX|�
|�dS)N)ru�	cancelledr>r@r?r5rtryr[�
set_exception�
set_result)rr{�
registered_fdr#rzr<rrXrrrrybs
z BaseSelectorEventLoop._sock_recvc�s<|jr|��dkrtd��|��}|�|d||�|IdHS)z�Receive data from the socket.

        The received data is written into *buf* (a writable buffer).
        The return value is the number of bytes written.
        rzthe socket must be non-blockingN)rErxrarZ�_sock_recv_into)rr#�bufr{rrr�sock_recv_intows
z$BaseSelectorEventLoop.sock_recv_intocCs�|dk	r|�|�|��rdSy|�|�}Wn`ttfk
rb|��}|�||j||||�Yn6tk
r�}z|�	|�Wdd}~XYnX|�
|�dS)N)rur}�	recv_intor@r?r5rtr�r[r~r)rr{r�r#r��nbytesrrXrrrr��s
z%BaseSelectorEventLoop._sock_recv_intoc�sL|jr|��dkrtd��|��}|r8|�|d||�n
|�d�|IdHS)a�Send data to the socket.

        The socket must be connected to a remote socket. This method continues
        to send data from data until either all data has been sent or an
        error occurs. None is returned on success. On error, an exception is
        raised, and there is no way to determine how much data, if any, was
        successfully processed by the receiving end of the connection.
        rzthe socket must be non-blockingN)rErxrarZ�
_sock_sendallr)rr#r<r{rrr�sock_sendall�s	
z"BaseSelectorEventLoop.sock_sendallc
Cs�|dk	r|�|�|��rdSy|�|�}WnFttfk
rHd}Yn,tk
rr}z|�|�dSd}~XYnX|t|�kr�|�d�n.|r�||d�}|�	�}|�
||j||||�dS)Nr)rwr}rCr@r?r[r~�lenrr5rvr�)rr{r�r#r<rzrXrrrrr��s"

z#BaseSelectorEventLoop._sock_sendallc�s~|jr|��dkrtd��ttd�r0|jtjkr^|j||j|j|d�IdH}|d\}}}}}|�	�}|�
|||�|IdHS)zTConnect to a remote socket at address.

        This method is a coroutine.
        rzthe socket must be non-blocking�AF_UNIX)�family�proto�loopN)rErxra�hasattrr8r�r�Z_ensure_resolvedr�rZ�
_sock_connect)rr#r-ZresolvedrUr{rrr�sock_connect�sz"BaseSelectorEventLoop.sock_connectc
Cs�|��}y|�|�Wnjttfk
rV|�t�|j|��|�||j	|||�Yn6t
k
r�}z|�|�Wdd}~XYnX|�d�dS)N)
r5Zconnectr@r?Zadd_done_callback�	functools�partial�_sock_connect_donerv�_sock_connect_cbr[r~r)rr{r#r-rrXrrrr��sz#BaseSelectorEventLoop._sock_connectcCs|�|�dS)N)rw)rrr{rrrr��sz(BaseSelectorEventLoop._sock_connect_donec
Cs�|��rdSy,|�tjtj�}|dkr6t|d|����WnBttfk
rPYn6tk
rz}z|�	|�Wdd}~XYnX|�
d�dS)NrzConnect call failed )r}Z
getsockoptr8Z
SOL_SOCKETZSO_ERRORrDr@r?r[r~r)rr{r#r-�errrXrrrr��sz&BaseSelectorEventLoop._sock_connect_cbc�s:|jr|��dkrtd��|��}|�|d|�|IdHS)aWAccept a connection.

        The socket must be bound to an address and listening for connections.
        The return value is a pair (conn, address) where conn is a new socket
        object usable to send and receive data on the connection, and address
        is the address bound to the socket on the other end of the connection.
        rzthe socket must be non-blockingFN)rErxrarZ�_sock_accept)rr#r{rrr�sock_accept�s
z!BaseSelectorEventLoop.sock_acceptc
Cs�|��}|r|�|�|��r"dSy|��\}}|�d�WnVttfk
rh|�||j|d|�Yn:t	k
r�}z|�
|�Wdd}~XYnX|�||f�dS)NFT)r5rur}rPr9r@r?rtr�r[r~r)rr{Z
registeredr#rrVr-rXrrrr�s
z"BaseSelectorEventLoop._sock_acceptc	�sl|j|j=|��}|��|��IdHz|j|j|||dd�IdHS|��|rZ|��||j|j<XdS)NF)Zfallback)	r�_sock_fd�
is_reading�
pause_reading�_make_empty_waiterZ
sock_sendfile�_sock�_reset_empty_waiter�resume_reading)rZtransp�file�offset�countr�rrr�_sendfile_natives
z&BaseSelectorEventLoop._sendfile_nativecCs�x~|D]v\}}|j|j}\}}|tj@rN|dk	rN|jrD|�|�n
|�|�|tj@r|dk	r|jrr|�|�q|�|�qWdS)N)	�fileobjr<rrgZ
_cancelledr3Z
_add_callbackrqrs)rZ
event_listrrmr�rnrorrr�_process_events#s
z%BaseSelectorEventLoop._process_eventscCs|�|���|��dS)N)r3r5r2)rr#rrr�
_stop_serving1sz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN),r�
__module__�__qualname__�__doc__rr&rZSSL_HANDSHAKE_TIMEOUTr+r.r2r1rr=r;rFrKrHrTrcr:r3rrrsrtrurvrwr|ryr�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__rr)rrr*sZ


+$
rcs�eZdZdZeZdZd�fdd�	Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zddd�Zdd�Zdd�Zdd�Zdd�Z�ZS) �_SelectorTransportiNcs�t��||�||jd<|��|jd<d|jkrdy|��|jd<Wn tjk
rbd|jd<YnX||_|��|_	d|_
|�|�||_|�
�|_d|_d|_|jdk	r�|j��||j|j	<dS)Nr8ZsocknamerNFr)rrZ_extraZgetsocknameZgetpeernamer8�errorr�r5r��_protocol_connected�set_protocol�_server�_buffer_factory�_buffer�
_conn_lost�_closingZ_attachr)rr�r#r$r r!)rrrrBs&






z_SelectorTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���|jdk	r�|j��s�t|jj	|jt
j�}|rz|�d�n
|�d�t|jj	|jt
j�}|r�d}nd}|�
�}|�d|�d	|�d
��d�d�|��S)
N�closed�closingzfd=zread=pollingz	read=idle�pollingZidlezwrite=<z
, bufsize=�>z<{}>� )rrr��appendr�r��_loopr0rrrrgrq�get_write_buffer_size�format�join)r�infor��state�bufsizerrr�__repr__Ys*



z_SelectorTransport.__repr__cCs|�d�dS)N)�_force_close)rrrr�abortusz_SelectorTransport.abortcCs||_d|_dS)NT)�	_protocolr�)rr$rrrr�xsz_SelectorTransport.set_protocolcCs|jS)N)r�)rrrr�get_protocol|sz_SelectorTransport.get_protocolcCs|jS)N)r�)rrrrrbsz_SelectorTransport.is_closingcCsT|jr
dSd|_|j�|j�|jsP|jd7_|j�|j�|j�|jd�dS)NTr)	r�r�r3r�r�r�rs�	call_soon�_call_connection_lost)rrrrr2�sz_SelectorTransport.closecCs.|jdk	r*tjd|��t|d�|j��dS)Nzunclosed transport )�source)r��warnings�warn�ResourceWarningr2)rrrr�__del__�s
z_SelectorTransport.__del__�Fatal error on transportcCsPt|tj�r*|j��rBtjd||dd�n|j�||||jd��|�	|�dS)Nz%r: %sT)rB)rLrMrYr$)
r]rZ_FATAL_ERROR_IGNOREr��	get_debugrrrSr�r�)rrXrLrrr�_fatal_error�s
z_SelectorTransport._fatal_errorcCsd|jr
dS|jr(|j��|j�|j�|jsBd|_|j�|j�|jd7_|j�|j	|�dS)NTr)
r�r��clearr�rsr�r�r3r�r�)rrXrrrr��s
z_SelectorTransport._force_closecCsVz|jr|j�|�Wd|j��d|_d|_d|_|j}|dk	rP|��d|_XdS)N)r�r�Zconnection_lostr�r2r�r�Z_detach)rrXr!rrrr��s
z(_SelectorTransport._call_connection_lostcCs
t|j�S)N)r�r�)rrrrr��sz(_SelectorTransport.get_write_buffer_sizecGs"|jr
dS|jj||f|��dS)N)r�r�r:)rrrjrkrrrr:�sz_SelectorTransport._add_reader)NN)r�)rr�r��max_size�	bytearrayr�r�rr�r�r�r�rbr2r�r�r�r�r�r:r�rr)rrr�6s 

r�cs�eZdZdZejjZd#�fdd�	Z�fdd�Z	dd�Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z�fdd�Zdd �Zd!d"�Z�ZS)$r"TNcs~d|_t��|||||�d|_d|_d|_t�|j�|j	�
|jj|�|j	�
|j
|j|j�|dk	rz|j	�
tj|d�dS)NF)�_read_ready_cbrr�_eof�_paused�
_empty_waiterrZ_set_nodelayr�r�r�r��connection_mader:r��_read_readyr�_set_result_unless_cancelled)rr�r#r$r%r r!)rrrr�s

z!_SelectorSocketTransport.__init__cs.t|tj�r|j|_n|j|_t��|�dS)N)r]rZBufferedProtocol�_read_ready__get_bufferr��_read_ready__data_receivedrr�)rr$)rrrr��s
z%_SelectorSocketTransport.set_protocolcCs|jo|jS)N)r�r�)rrrrr��sz#_SelectorSocketTransport.is_readingcCs>|js|jrdSd|_|j�|j�|j��r:t�d|�dS)NTz%r pauses reading)r�r�r�r3r�r�rr)rrrrr��s
z&_SelectorSocketTransport.pause_readingcCs@|js|jsdSd|_|�|j|j�|j��r<t�d|�dS)NFz%r resumes reading)	r�r�r:r�r�r�r�rr)rrrrr��s
z'_SelectorSocketTransport.resume_readingcCs|��dS)N)r�)rrrrr��sz$_SelectorSocketTransport._read_readyc
Cs|jr
dSy |j�d�}t|�s(td��Wn.tk
rX}z|�|d�dSd}~XYnXy|j�|�}WnDt	t
fk
r�dStk
r�}z|�|d�dSd}~XYnX|s�|��dSy|j�|�Wn0tk
�r}z|�|d�Wdd}~XYnXdS)N���z%get_buffer() returned an empty bufferz/Fatal error: protocol.get_buffer() call failed.z$Fatal read error on socket transportz3Fatal error: protocol.buffer_updated() call failed.)
r�r�Z
get_bufferr�r/r[r�r�r�r@r?�_read_ready__on_eofZbuffer_updated)rr�rXr�rrrr��s2z0_SelectorSocketTransport._read_ready__get_bufferc
Cs�|jr
dSy|j�|j�}WnDttfk
r4dStk
r`}z|�|d�dSd}~XYnX|sr|��dSy|j	�
|�Wn.tk
r�}z|�|d�Wdd}~XYnXdS)Nz$Fatal read error on socket transportz2Fatal error: protocol.data_received() call failed.)r�r�r>r�r@r?r[r�r�r�Z
data_received)rr<rXrrrr�s"z3_SelectorSocketTransport._read_ready__data_receivedc
Cst|j��rt�d|�y|j��}Wn.tk
rR}z|�|d�dSd}~XYnX|rh|j�|j	�n|�
�dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)r�r�rrr�Zeof_receivedr[r�r3r�r2)rZ	keep_openrXrrrr�2s
z,_SelectorSocketTransport._read_ready__on_eofc
Cst|tttf�s$tdt|�j����|jr2td��|j	dk	rDtd��|sLdS|j
rz|j
tjkrht
�d�|j
d7_
dS|j�s�y|j�|�}WnDttfk
r�YnBtk
r�}z|�|d�dSd}~XYnX||d�}|s�dS|j�|j|j�|j�|�|��dS)Nz/data argument must be a bytes-like object, not z%Cannot call write() after write_eof()z(unable to write; sendfile is in progresszsocket.send() raised exception.rz%Fatal write error on socket transport)r]�bytesr��
memoryviewr`�typerr�r/r�r�r�!LOG_THRESHOLD_FOR_CONNLOST_WRITESr�warningr�r�rCr@r?r[r�r�rrr��_write_ready�extend�_maybe_pause_protocol)rr<rzrXrrr�writeEs6

z_SelectorSocketTransport.writec
Cs|jstd��|jrdSy|j�|j�}Wnrttfk
rBYn�tk
r�}z>|j�	|j
�|j��|�|d�|j
dk	r�|j
�|�Wdd}~XYnnX|r�|jd|�=|��|j�s
|j�	|j
�|j
dk	r�|j
�d�|jr�|�d�n|j�r
|j�tj�dS)NzData should not be emptyz%Fatal write error on socket transport)r��AssertionErrorr�r�rCr@r?r[r�rsr�r�r�r�r~�_maybe_resume_protocolrr�r�r��shutdownr8�SHUT_WR)rrzrXrrrr�js0


z%_SelectorSocketTransport._write_readycCs.|js|jrdSd|_|js*|j�tj�dS)NT)r�r�r�r�r�r8r�)rrrr�	write_eof�s
z"_SelectorSocketTransport.write_eofcCsdS)NTr)rrrr�
can_write_eof�sz&_SelectorSocketTransport.can_write_eofcs*t��|�|jdk	r&|j�td��dS)NzConnection is closed by peer)rr�r�r~�ConnectionError)rrX)rrrr��s
z._SelectorSocketTransport._call_connection_lostcCs6|jdk	rtd��|j��|_|js0|j�d�|jS)NzEmpty waiter is already set)r�r/r�rZr�r)rrrrr��s
z+_SelectorSocketTransport._make_empty_waitercCs
d|_dS)N)r�)rrrrr��sz,_SelectorSocketTransport._reset_empty_waiter)NNN)rr�r�Z_start_tls_compatiblerZ
_SendfileModeZ
TRY_NATIVEZ_sendfile_compatiblerr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr)rrr"�s&%r"csFeZdZejZd�fdd�	Zdd�Zdd�Zd
dd	�Z	d
d�Z
�ZS)r,Ncs^t��||||�||_|j�|jj|�|j�|j|j|j	�|dk	rZ|j�t
j|d�dS)N)rr�_addressr�r�r�r�r:r�r�rr�)rr�r#r$r-r%r )rrrr�s

z#_SelectorDatagramTransport.__init__cCstdd�|jD��S)Ncss|]\}}t|�VqdS)N)r�)�.0r<rUrrr�	<genexpr>�szC_SelectorDatagramTransport.get_write_buffer_size.<locals>.<genexpr>)�sumr�)rrrrr��sz0_SelectorDatagramTransport.get_write_buffer_sizec
Cs�|jr
dSy|j�|j�\}}Wnpttfk
r8Ynhtk
rd}z|j�|�Wdd}~XYn<t	k
r�}z|�
|d�Wdd}~XYnX|j�||�dS)Nz&Fatal read error on datagram transport)r�r�Zrecvfromr�r@r?rDr��error_receivedr[r�Zdatagram_received)rr<rWrXrrrr��sz&_SelectorDatagramTransport._read_readyc
CsZt|tttf�s$tdt|�j����|s,dS|jrP|d|jfkrPtd|j����|j	r�|jr�|j	t
jkrrt�
d�|j	d7_	dS|j�s:y&|jr�|j�|�n|j�||�dSttfk
r�|j�|j|j�Yn^tk
�r
}z|j�|�dSd}~XYn0tk
�r8}z|�|d�dSd}~XYnX|j�t|�|f�|��dS)Nz/data argument must be a bytes-like object, not z!Invalid address: must be None or zsocket.send() raised exception.rz'Fatal write error on datagram transport)r]r�r�r�r`r�rr�rar�rr�rr�r�r�rC�sendtor@r?r�rrr��
_sendto_readyrDr�r�r[r�r�r�)rr<rWrXrrrr��s:
z!_SelectorDatagramTransport.sendtoc
Cs�x�|jr�|j��\}}y&|jr,|j�|�n|j�||�Wqttfk
rf|j�||f�PYqt	k
r�}z|j
�|�dSd}~XYqtk
r�}z|�
|d�dSd}~XYqXqW|��|js�|j�|j�|jr�|�d�dS)Nz'Fatal write error on datagram transport)r��popleftr�r�rCr�r@r?�
appendleftrDr�r�r[r�r�r�rsr�r�r�)rr<rWrXrrrr��s*z(_SelectorDatagramTransport._sendto_ready)NNN)N)rr�r��collections�dequer�rr�r�r�r�r�rr)rrr,�s
'r,)r��__all__r�rRr�rr8r�rZssl�ImportError�rrrrrr	r
�logrrZ
BaseEventLooprZ_FlowControlMixinZ	Transportr�r"r,rrrr�<module>s@
_