Edit File: connection.cpython-36.pyc
3 48eVy������������������@���s��d�dddgZ�ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl mZ�ddl mZm Z �dd lmZ�ejZy$ddlZdd lmZmZmZmZ�W�n$�ek r����ejdkr�dZY�nX�dZd ZdZej��ZdZdgZe ed��rdZedg7�Zejdk�rdZedg7�Zefdd�Z!dd��Z"dd��Z#dd��Z$dd��Z%G�dd��d�Z&e�rnG�dd��de&�Z'G�d d!��d!e&�Z(G�d"d��de)�Z*dPd#d��Z+ejdk�r�dQd%d�Z,n dRd&d�Z,G�d'd(��d(e)�Z-d)d*��Z.ejdk�r�G�d+d,��d,e)�Z/d-d.��Z0d/Z1d0Z2d1Z3d2Z4d3d4��Z5d5d6��Z6G�d7d8��d8e)�Z7d9d:��Z8d;d<��Z9G�d=d>��d>e*�Z:d?d@��Z;ejdk�rzdAdB��Z<ej=ej>hZ?dSdCd�Z@n,ddlAZAe eAdD��r�eAjBZCneAjDZCdTdEd�Z@ejdk�r�dFdG��ZEdHdI��ZFejGe(eE��dJdK��ZHdLdM��ZIejGe'eH��ndNdG��ZEdOdI��ZFejGe(eE��dS�)U�Client�Listener�Pipe�wait�����N����)�util)�AuthenticationError�BufferTooShort)� reduction)� WAIT_OBJECT_0�WAIT_ABANDONED_0�WAIT_TIMEOUT�INFINITE�win32i� ��g������4@Zsha256�AF_INET�AF_UNIX�AF_PIPEc�������������C���s���t�j��|��S�)N)�time� monotonic)�timeout��r����2/usr/lib64/python3.6/multiprocessing/connection.py� _init_timeout?���s����r���c�������������C���s���t�j��|�kS�)N)r���r���)�tr���r���r����_check_timeoutB���s����r���c�������������C���sX���|�dkrdS�|�dkr&t�jdtj��d�S�|�dkrLt�jdtj��tt�f�d d�S�td ��dS�) z? Return an arbitrary free address for the given family r���� localhostr���r���z listener-)�prefix�dirr���z\\.\pipe\pyc-%d-%d-��zunrecognized familyN)r���r���) �tempfileZmktempr���Zget_temp_dir�os�getpid�next� _mmap_counter� ValueError)�familyr���r���r����arbitrary_addressI���s����r&���c�������������C���sJ���t�jdkr|�dkrtd|����t�jdkrF|�dkrFtt|��sFtd|����dS�)zD Checks if the family is valid for the current environment. r���r���zFamily %s is not recognized.r���N)�sys�platformr$����hasattr�socket)r%���r���r���r����_validate_familyW���s ���� r+���c�������������C���sJ���t�|��tkrdS�t�|��tkr*|�jd�r*dS�t�|��tkr:dS�td|����dS�)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' r���z\\r���r���zaddress type of %r unrecognizedN)�type�tuple�str� startswithr$���)�addressr���r���r����address_typec���s����r1���c���������������@���s����e�Zd�ZdZd+dd�Zdd��Zdd��Zd d ��Zdd��Zd d��Z e dd���Ze dd���Ze dd���Z dd��Zdd��Zd,dd�Zdd��Zd-dd�Zd.d d!�Zd"d#��Zd/d%d&�Zd'd(��Zd)d*��ZdS�)0�_ConnectionBaseNTc�������������C���sB���|j���}|dk�rtd��|�r,|�r,td��||�_||�_||�_d�S�)Nr���zinvalid handlez6at least one of `readable` and `writable` must be True)� __index__r$����_handle� _readable� _writable)�self�handle�readable�writabler���r���r����__init__y���s����z_ConnectionBase.__init__c�������������C���s���|�j�d�k r|�j���d�S�)N)r4����_close)r7���r���r���r����__del__����s���� z_ConnectionBase.__del__c�������������C���s���|�j�d�krtd��d�S�)Nzhandle is closed)r4����OSError)r7���r���r���r���� _check_closed����s���� z_ConnectionBase._check_closedc�������������C���s���|�j�std��d�S�)Nzconnection is write-only)r5���r>���)r7���r���r���r����_check_readable����s����z_ConnectionBase._check_readablec�������������C���s���|�j�std��d�S�)Nzconnection is read-only)r6���r>���)r7���r���r���r����_check_writable����s����z_ConnectionBase._check_writablec�������������C���s"���|�j�rd|�_n|�j���td��d�S�)NFzbad message length)r6���r5����closer>���)r7���r���r���r����_bad_message_length����s����z#_ConnectionBase._bad_message_lengthc�������������C���s ���|�j�dkS�)z True if the connection is closedN)r4���)r7���r���r���r����closed����s����z_ConnectionBase.closedc�������������C���s���|�j�S�)z"True if the connection is readable)r5���)r7���r���r���r���r9�������s����z_ConnectionBase.readablec�������������C���s���|�j�S�)z"True if the connection is writable)r6���)r7���r���r���r���r:�������s����z_ConnectionBase.writablec�������������C���s���|�j����|�jS�)z+File descriptor or handle of the connection)r?���r4���)r7���r���r���r����fileno����s����z_ConnectionBase.filenoc�������������C���s$���|�j�dk r z|�j���W�dd|�_�X�dS�)zClose the connectionN)r4���r<���)r7���r���r���r���rB�������s���� z_ConnectionBase.closer���c�������������C���s����|�j����|�j���t|�}|jdkr.tt|��}t|�}|dk�rFtd��||k�rVtd��|dkrh||�}n&|dk�rztd��n||�|kr�td��|�j||||�����dS�)z,Send the bytes data from a bytes-like objectr���r���zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r?���rA���� memoryview�itemsize�bytes�lenr$����_send_bytes)r7����buf�offset�size�m�nr���r���r���� send_bytes����s"���� z_ConnectionBase.send_bytesc�������������C���s$���|�j����|�j���|�jtj|���dS�)zSend a (picklable) objectN)r?���rA���rJ����_ForkingPickler�dumps)r7����objr���r���r����send����s����z_ConnectionBase.sendc�������������C���sJ���|�j����|�j���|dk r(|dk�r(td��|�j|�}|dkrB|�j���|j��S�)z7 Receive bytes data as a bytes object. Nr���znegative maxlength)r?���r@���r$����_recv_bytesrC����getvalue)r7���Z maxlengthrK���r���r���r���� recv_bytes����s���� z_ConnectionBase.recv_bytesc�������������C���s����|�j����|�j���t|���}|j}|t|��}|dk�r>td��n||krNtd��|�j��}|j��}|||�k�rvt|j ����|j d��|j|||�||�|�����|S�Q�R�X�dS�)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. r���znegative offsetzoffset too largeN)r?���r@���rF���rG���rI���r$���rU����tellr ���rV����seek�readinto)r7���rK���rL���rN���rG���Zbytesize�resultrM���r���r���r����recv_bytes_into����s"���� z_ConnectionBase.recv_bytes_intoc�������������C���s&���|�j����|�j���|�j��}tj|j���S�)zReceive a (picklable) object)r?���r@���rU���rQ����loads� getbuffer)r7���rK���r���r���r����recv����s����z_ConnectionBase.recv���������c�������������C���s���|�j����|�j���|�j|�S�)z/Whether there is any input available to be read)r?���r@����_poll)r7���r���r���r���r����poll��s����z_ConnectionBase.pollc�������������C���s���|�S�)Nr���)r7���r���r���r���� __enter__��s����z_ConnectionBase.__enter__c�������������C���s���|�j����d�S�)N)rB���)r7����exc_type� exc_value�exc_tbr���r���r����__exit__ ��s����z_ConnectionBase.__exit__)TT)r���N)N)r���)r`���)�__name__� __module__�__qualname__r4���r;���r=���r?���r@���rA���rC����propertyrD���r9���r:���rE���rB���rP���rT���rW���r\���r_���rb���rc���rg���r���r���r���r���r2���v���s(��� r2���c���������������@���sD���e�Zd�ZdZdZejfdd�Zdd��Zddd �Z d d��Z dd ��ZdS�)�PipeConnectionz� Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. Fc�������������C���s���||�j���d�S�)N)r4���)r7���Z_CloseHandler���r���r���r<�����s����zPipeConnection._closec�������������C���s����t�j|�j|dd�\}}zHy,|t�jkrBt�j|jgdt�}|tksBt�W�n���|j �����Y�nX�W�d�|j d�\}}X�|dks|t�|t|�ks�t�d�S�)NT)� overlappedFr���)�_winapiZ WriteFiler4����ERROR_IO_PENDING�WaitForMultipleObjects�eventr���r����AssertionError�cancel�GetOverlappedResultrI���)r7���rK����ov�err�waitresZnwrittenr���r���r���rJ�����s���� zPipeConnection._send_bytesNc������� ������C���s��|�j�rd|�_�tj��S�|d�kr dnt|d�}y�tj|�j|dd�\}}zHy,|tjkrntj|j gdt �}|tksnt�W�n���|j �����Y�nX�W�d�|jd�\}}|dkr�tj��}|j|j����|S�|tjkr�|�j||�S�X�W�n:�tk �r�}�z|jtjk��r�t�n��W�Y�d�d�}~X�nX�td��d�S�)NF����T)rm���r���z.shouldn't get here; expected KeyboardInterrupt)�_got_empty_message�io�BytesIO�minrn����ReadFiler4���ro���rp���rq���r���r���rr���rs���rt����writer^���ZERROR_MORE_DATA�_get_more_datar>����winerror�ERROR_BROKEN_PIPE�EOFError�RuntimeError) r7����maxsizeZbsizeru���rv���rw���Znread�f�er���r���r���rU���*��s6���� zPipeConnection._recv_bytesc�������������C���s.���|�j�stj|�j�d�dkrdS�tt|�g|��S�)Nr���T)ry���rn���� PeekNamedPiper4����boolr���)r7���r���r���r���r���ra���J��s����zPipeConnection._pollc�������������C���s����|j���}tj��}|j|��tj|�j�d�}|dks6t�|d�k rVt|�|�|krV|�j ���tj |�j|dd�\}}|jd�\}}|dks�t�||ks�t�|j|j�����|S�)Nr���r���T)rm���)r^���rz���r{���r~���rn���r����r4���rr���rI���rC���r}���rt���)r7���ru���r����rK���r�����leftrv���Zrbytesr���r���r���r���P��s���� zPipeConnection._get_more_data)N)rh���ri���rj����__doc__ry���rn����CloseHandler<���rJ���rU���ra���r���r���r���r���r���rl�����s��� rl���c���������������@���s|���e�Zd�ZdZer,ejfdd�ZejZ ej Znej fdd�ZejZ ejZe fdd�Zefdd�Zd d ��Zddd �Zdd��ZdS�)� Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). c�������������C���s���||�j���d�S�)N)r4���)r7���r<���r���r���r���r<���g��s����zConnection._closec�������������C���s���||�j���d�S�)N)r4���)r7���r<���r���r���r���r<���l��s����c�������������C���s<���t�|�}x.||�j|�}||8�}|dkr(P�||d���}q W�d�S�)Nr���)rI���r4���)r7���rK���r~���� remainingrO���r���r���r����_sendq��s����zConnection._sendc�������������C���sf���t�j��}|�j}|}xN|dkr`|||�}t|�}|dkrL||krDt�ntd��|j|��||8�}qW�|S�)Nr���zgot end of file during message)rz���r{���r4���rI���r����r>���r~���)r7���rM����readrK���r8���r�����chunkrO���r���r���r����_recvz��s���� zConnection._recvc�������������C���sD���t�|�}tjd|�}|dkr2|�j|��|�j|��n|�j||���d�S�)Nz!ii�@��)rI����structZpackr����)r7���rK���rO����headerr���r���r���rJ������s���� zConnection._send_bytesNc�������������C���s:���|�j�d�}tjd|j���\}|d�k r0||kr0d�S�|�j�|�S�)N����z!i)r����r����ZunpackrV���)r7���r����rK���rM���r���r���r���rU������s ���� zConnection._recv_bytesc�������������C���s���t�|�g|�}t|�S�)N)r���r����)r7���r����rr���r���r���ra������s����zConnection._poll)N)rh���ri���rj���r����rn����_multiprocessingZclosesocketr<���rT���Z_writer_���Z_readr ���rB���r~���r����r����r����rJ���rU���ra���r���r���r���r���r����`��s��� r����c���������������@���sR���e�Zd�ZdZddd�Zdd��Zdd ��Zed d���Zedd���Z d d��Z dd��ZdS�)r���z� Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. Nr���c�������������C���sr���|p|rt�|�pt}|pt|�}t|��|dkr>t||�|�_nt|||�|�_|d�k rht|t��rht d��||�_ d�S�)Nr���zauthkey should be a byte string)r1����default_familyr&���r+����PipeListener� _listener�SocketListener� isinstancerH���� TypeError�_authkey)r7���r0���r%����backlog�authkeyr���r���r���r;������s����zListener.__init__c�������������C���s>���|�j�dkrtd��|�j�j��}|�jr:t||�j��t||�j��|S�)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)r����r>����acceptr�����deliver_challenge�answer_challenge)r7����cr���r���r���r�������s���� zListener.acceptc�������������C���s ���|�j�}|dk rd|�_�|j���dS�)zA Close the bound socket or named pipe of `self`. N)r����rB���)r7���Zlistenerr���r���r���rB������s����zListener.closec�������������C���s���|�j�jS�)N)r�����_address)r7���r���r���r����<lambda>���s����zListener.<lambda>c�������������C���s���|�j�jS�)N)r�����_last_accepted)r7���r���r���r���r�������s����c�������������C���s���|�S�)Nr���)r7���r���r���r���rc������s����zListener.__enter__c�������������C���s���|�j����d�S�)N)rB���)r7���rd���re���rf���r���r���r���rg������s����zListener.__exit__)NNr���N)rh���ri���rj���r����r;���r����rB���rk���r0���Z last_acceptedrc���rg���r���r���r���r���r������s��� c�������������C���sj���|p t�|��}t|��|dkr&t|��}nt|��}|dk rJt|t��rJtd��|dk rft||��t||��|S�)z= Returns a connection to the address of a `Listener` r���Nzauthkey should be a byte string) r1���r+���� PipeClient�SocketClientr����rH���r����r����r����)r0���r%���r����r����r���r���r���r������s���� Tc�������������C���sj���|�r>t�j��\}}|jd��|jd��t|j���}t|j���}n$tj��\}}t|dd�}t|dd�}||fS�)zL Returns pair of connection objects at either end of a pipe TF)r:���)r9���)r*���Z socketpair�setblockingr�����detachr ����pipe)�duplex�s1�s2�c1�c2Zfd1Zfd2r���r���r���r������s���� c������� ��� ���C���s����t�d�}|�r*tj}tjtjB�}tt�}}ntj}tj}dt�}}tj||tjB�tj B�tj tjB�tjB�d||tj tj�}tj||dtjtjtjtj�}tj|tjdd��tj|dd�}|jd�\} } | dks�t�t||�d�}t||�d�}||fS�) zL Returns pair of connection objects at either end of a pipe r���r���r���NT)rm���)r:���)r9���)r&���rn����PIPE_ACCESS_DUPLEX�GENERIC_READ� GENERIC_WRITE�BUFSIZEZPIPE_ACCESS_INBOUND�CreateNamedPipe�FILE_FLAG_OVERLAPPED�FILE_FLAG_FIRST_PIPE_INSTANCE�PIPE_TYPE_MESSAGE�PIPE_READMODE_MESSAGE� PIPE_WAIT�NMPWAIT_WAIT_FOREVER�NULL� CreateFile� OPEN_EXISTING�SetNamedPipeHandleState�ConnectNamedPipert���rr���rl���) r����r0���Zopenmode�accessZobsizeZibsizeZh1Zh2rm����_rv���r����r����r���r���r���r�����s4���� c���������������@���s*���e�Zd�ZdZd dd�Zdd��Zdd��Zd S�)r����zO Representation of a socket which is bound to an address and listening r���c�������������C���s����t�j�tt�|��|�_yRtjdkr2|�jjt�jt�jd��|�jjd��|�jj |��|�jj |��|�jj��|�_W�n �t k r����|�jj�����Y�nX�||�_d�|�_|dkr�tj|�tj|fdd�|�_nd�|�_d�S�)N�posixr���Tr���r���)�args�exitpriority)r*����getattr�_socketr ����nameZ setsockoptZ SOL_SOCKETZSO_REUSEADDRr����ZbindZlistenZgetsocknamer����r>���rB���Z_familyr����r����Finalize�unlink�_unlink)r7���r0���r%���r����r���r���r���r;���<��s$���� zSocketListener.__init__c�������������C���s&���|�j�j��\}|�_|jd��t|j���S�)NT)r����r����r����r����r����r����)r7����sr���r���r���r����T��s���� zSocketListener.acceptc�������������C���s0���z|�j�j���W�d�|�j}|d�k r*d�|�_|���X�d�S�)N)r����rB���r����)r7���r����r���r���r���rB���Y��s����zSocketListener.closeN)r���)rh���ri���rj���r����r;���r����rB���r���r���r���r���r����8��s��� r����c���������� ���C���sD���t�|��}tjtt|���"}|jd��|j|���t|j���S�Q�R�X�dS�)zO Return a connection object connected to the socket given by `address` TN)r1���r*���r����r����Zconnectr����r����)r0���r%���r����r���r���r���r����c��s ���� r����c���������������@���s8���e�Zd�ZdZddd�Zd dd�Zdd ��Zed d���ZdS�)r����z0 Representation of a named pipe Nc�������������C���sL���||�_�|�jdd�g|�_d�|�_tjd|�j���tj|�tj|�j|�j�fdd�|�_ d�S�)NT)�firstz listener created with address=%rr���)r����r����) r�����_new_handle� _handle_queuer����r���� sub_debugr����r�����_finalize_pipe_listenerrB���)r7���r0���r����r���r���r���r;���w��s����zPipeListener.__init__Fc���������� ���C���sH���t�jt�jB�}|r|t�jO�}t�j|�j|t�jt�jB�t�jB�t�j t t t�jt�j�S�)N) rn���r����r����r����r����r����r����r����r����ZPIPE_UNLIMITED_INSTANCESr����r����r����)r7���r�����flagsr���r���r���r�������s���� zPipeListener._new_handlec�������������C���s����|�j�j|�j����|�j�jd�}ytj|dd�}W�n0�tk r^�}�z|jtjkrN��W�Y�d�d�}~X�n\X�z<ytj |j gdt�}W�n ���|j���tj |����Y�nX�W�d�|jd�\}}|dks�t�X�t|�S�)Nr���T)rm���F)r�����appendr�����poprn���r����r>���r����Z ERROR_NO_DATArp���rq���r���rs���r����rt���rr���rl���)r7���r8���ru���r�����resr����rv���r���r���r���r�������s"���� zPipeListener.acceptc�������������C���s(���t�jd|��x|�D�]}tj|��qW�d�S�)Nz closing listener with address=%r)r���r����rn���r����)Zqueuer0���r8���r���r���r���r�������s���� z$PipeListener._finalize_pipe_listener)N)F) rh���ri���rj���r����r;���r����r�����staticmethodr����r���r���r���r���r����s��s ��� r����c�������������C���s����t���}x~y6tj|�d��tj|�tjtjB�dtjtjtjtj�}W�n>�t k r|�}�z"|j tjtjfksjt |�rl��W�Y�dd}~X�qX�P�qW���tj|tjdd��t|�S�)zU Return a connection object connected to the pipe given by `address` i���r���N)r���rn���Z WaitNamedPiper����r����r����r����r����r����r>���r����ZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYr���r����r����rl���)r0���r����hr����r���r���r���r�������s"���� r��������s���#CHALLENGE#s ���#WELCOME#s ���#FAILURE#c�������������C���st���dd�l�}t|t�st�tjt�}|�jt|���|j ||t �j��}|�jd�}||kr^|�jt ��n|�jt��td��d�S�)Nr�������zdigest received was wrong)�hmacr����rH���rr���r ����urandom�MESSAGE_LENGTHrP���� CHALLENGE�new�HMAC_DIGEST_NAME�digestrW����WELCOME�FAILUREr���)� connectionr����r�����messager�����responser���r���r���r�������s���� r����c�������������C���s����dd�l�}t|t�st�|�jd�}|d�tt���tks@td|���|tt�d���}|j||t�j ��}|�j |��|�jd�}|tkr�td��d�S�)Nr���r����zmessage = %rzdigest sent was rejected) r����r����rH���rr���rW���rI���r����r����r����r����rP���r����r���)r����r����r����r����r����r����r���r���r���r�������s���� r����c���������������@���s$���e�Zd�Zdd��Zdd��Zdd��ZdS�)�ConnectionWrapperc�������������C���s:���||�_�||�_||�_x"dD�]}t||�}t|�||��qW�d�S�)NrE���rB���rb���rW���rP���)rE���rB���rb���rW���rP���)�_conn�_dumps�_loadsr�����setattr)r7����connrR���r]����attrrS���r���r���r���r;������s���� zConnectionWrapper.__init__c�������������C���s���|�j�|�}|�jj|��d�S�)N)r����r����rP���)r7���rS���r����r���r���r���rT������s���� zConnectionWrapper.sendc�������������C���s���|�j�j��}|�j|�S�)N)r����rW���r����)r7���r����r���r���r���r_������s���� zConnectionWrapper.recvN)rh���ri���rj���r;���rT���r_���r���r���r���r���r�������s���r����c�������������C���s���t�j|�fd�d�d�d�jd�S�)Nr���zutf-8)� xmlrpclibrR����encode)rS���r���r���r���� _xml_dumps���s����r����c�������������C���s���t�j|�jd��\\}}|S�)Nzutf-8)r����r]����decode)r����rS����methodr���r���r���� _xml_loads���s����r����c���������������@���s���e�Zd�Zdd��ZdS�)�XmlListenerc�������������C���s ���dd�l�jatj|��}t|tt�S�)Nr���)� xmlrpc.client�clientr����r���r����r����r����r����)r7���rS���r���r���r���r������s���� zXmlListener.acceptN)rh���ri���rj���r����r���r���r���r���r������s���r����c��������������O���s���dd�l�jatt|�|�tt�S�)Nr���)r����r����r����r����r���r����r����)r�����kwdsr���r���r���� XmlClient ��s���� r����c�������������C���s����t�|��}g�}x�|r�tj|d|�}|tkr,P�n\t|��koFtt|��k�n��rV|t8�}n2t|��koptt|��k�n��r�|t8�}ntd��|j||���||d�d���}d}qW�|S�)NFzShould not get herer���r���) �listrn���rp���r ���r���rI���r���r����r����)Zhandlesr����L�readyr����r���r���r����_exhaustive_wait��s���� r����c������� ���.������sn��|dkrt�}n|dk�rd}nt|d�d��}t|��}�i��g�}t����t��}�zH�x2|�D��](}yt|d�}W�n �tk r����|�|j��<�Y�qTX�ytj|��dd�\}}W�n8�t k r��}�zd|j �}}|tkrʂ�W�Y�dd}~X�nX�|tjkr�|j |��|�|j<�qT|�rptj��dd��dk�rpy|jd �\} }W�n*�t k �rT�}�z|j }W�Y�dd}~X�nX�|��rpt|d ��rpd|_��j|��d}qTW�t�j��|�}W�dx|D�]}|j����q�W�x�|D�]�}y|jd�\} }W�n6�t k �r��}�z|j }|tk�r��W�Y�dd}~X�nX�|tjk�r��|j�}��j|��|dk�r�t|d ��r�d|_�q�W�X���j�fdd�|D������fd d�|�D��S�)z� Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. Nr���i���g�������?rE���T��������Fry���c�������������3���s���|�]}��|�V��qd�S�)Nr���)�.0r����)�waithandle_to_objr���r���� <genexpr>v��s����zwait.<locals>.<genexpr>c����������������s���g�|�]}|��kr|�qS�r���r���)r�����o)� ready_objectsr���r���� <listcomp>w��s����zwait.<locals>.<listcomp>)r����r����)r����intr�����setr�����AttributeErrorr3���rn���r}���r>���r����� _ready_errorsro���r����rq���r'���Zgetwindowsversionrt���r)���ry����addr�����keysrs���ZERROR_OPERATION_ABORTED�update) �object_listr���Zov_listZ ready_handlesr��rE���ru���rv���r����r����r���)r��r����r���r���+��sh���� �PollSelectorc�������������C���s����t����x}x|�D�]}|j|tj��qW�|dk r8tj��|�}x@|j|�}|rVdd��|D��S�|dk r:|tj���}|dk�r:|S�q:W�W�dQ�R�X�dS�)z� Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. Nc�������������S���s���g�|�]\}}|j��qS�r���)Zfileobj)r�����keyZeventsr���r���r���r�����s����zwait.<locals>.<listcomp>r���)� _WaitSelector�register� selectorsZ EVENT_READr���r���Zselect)r��r���ZselectorrS���Zdeadliner����r���r���r���r������s���� c�������������C���sN���|�j���}tj|tjtj��*}ddlm}�|j|�}t||�j |�j ffS�Q�R�X�d�S�)Nr���)�resource_sharer)rE���r*���Zfromfdr���ZSOCK_STREAMr���r��Z DupSocket�rebuild_connectionr9���r:���)r����r8���r����r���dsr���r���r����reduce_connection���s ���� r��c�������������C���s���|�j���}t|j���||�S�)N)r����r����)r��r9���r:���Zsockr���r���r���r�����s����r��c�������������C���sB���|�j�rtjnd|�jrtjndB�}tj|�j��|�}t||�j�|�jffS�)Nr���) r9���rn���ZFILE_GENERIC_READr:���ZFILE_GENERIC_WRITEr ���Z DupHandlerE����rebuild_pipe_connection)r����r�����dhr���r���r����reduce_pipe_connection���s����r��c�������������C���s���|�j���}t|||�S�)N)r����rl���)r��r9���r:���r8���r���r���r���r�����s����r��c�������������C���s ���t�j|�j���}t||�j|�jffS�)N)r ���ZDupFdrE���r��r9���r:���)r�����dfr���r���r���r�����s����c�������������C���s���|�j���}t|||�S�)N)r����r����)r��r9���r:����fdr���r���r���r�����s����)NN)T)T)N)N)J�__all__rz���r ���r'���r*���r����r���r���� itertoolsr����r���r���r���r ����contextr ���ZForkingPicklerrQ���rn���r���r���r ���r����ImportErrorr(���r����ZCONNECTION_TIMEOUTr�����countr#���r����Zfamiliesr)���r���r���r&���r+���r1���r2���rl���r�����objectr���r���r���r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����ZERROR_NETNAME_DELETEDr��r���r��r��r��ZSelectSelectorr��r��r��r��r��r���r���r���r����<module> ���s���� �PJ8 ,+8 P