File: //lib64/python3.6/asyncio/__pycache__/windows_utils.cpython-36.opt-1.pyc
3
  \�  �               @   s�   d Z ddlZejdkred��ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddddd	gZd
Z
e	jZe	jZej� Zeed�r�ejZnejejdfdd�Zdde
d�dd�ZG dd	� d	�ZG dd� de	j�ZdS )z*
Various Windows specific bits and pieces
�    NZwin32z
win32 only�
socketpair�pipe�Popen�PIPE�
PipeHandlei    c       
      C   s  | t jkrd}n| t jkr d}ntd��|t jkr:td��|dkrJtd��t j | ||�}z�|j|df� |jd� |j� dd	� \}}t j | ||�}yP|jd
� y|j	||f� W n t
tfk
r�   Y nX |jd� |j� \}}	W n   |j
�  � Y nX W d|j
�  X ||fS )z�A socket pair usable as a self-pipe, for Windows.
        Origin: https://gist.github.com/4325783, by Geert Jansen.
        Public domain.
        z	127.0.0.1z::1z?Only AF_INET and AF_INET6 socket address families are supportedz)Only SOCK_STREAM socket type is supportedr   zOnly protocol zero is supported�   N�   FT)�socket�AF_INETZAF_INET6�
ValueError�SOCK_STREAMZbindZlistenZgetsocknameZsetblockingZconnect�BlockingIOError�InterruptedErrorZaccept�close)
Zfamily�type�proto�hostZlsockZaddrZportZcsockZssock�_� r   �-/usr/lib64/python3.6/asyncio/windows_utils.pyr   %   s8    
FT)�duplex�
overlapped�bufsizec             C   s"  t jdtj� tt�f d�}| r>tj}tjtj	B }|| }}ntj
}tj	}d| }}|tjO }|d rp|tjO }|d r�tj}nd}d }	}
yZtj
||tjd||tjtj�}	tj||dtjtj|tj�}
tj|	dd�}|jd� |	|
fS    |	dk	�rtj|	� |
dk	�rtj|
� � Y nX dS )zELike os.pipe() but with overlapped support and using handles not fds.z\\.\pipe\python-pipe-%d-%d-)�prefixr   r   NT)r   )�tempfileZmktemp�os�getpid�next�
_mmap_counter�_winapiZPIPE_ACCESS_DUPLEXZGENERIC_READZ
GENERIC_WRITEZPIPE_ACCESS_INBOUNDZFILE_FLAG_FIRST_PIPE_INSTANCEZFILE_FLAG_OVERLAPPEDZCreateNamedPipeZ	PIPE_WAITZNMPWAIT_WAIT_FOREVERZNULLZ
CreateFileZ
OPEN_EXISTINGZConnectNamedPipeZGetOverlappedResult�CloseHandle)r   r   r   ZaddressZopenmode�accessZobsizeZibsizeZflags_and_attribsZh1Zh2Zovr   r   r   r   S   s@    
c               @   s\   e Zd ZdZdd� Zdd� Zedd� �Zdd	� Ze	j
d
�dd�Zd
d� Zdd� Z
dd� ZdS )r   z�Wrapper for an overlapped pipe handle which is vaguely file-object like.
    The IOCP event loop can use these instead of socket objects.
    c             C   s
   || _ d S )N)�_handle)�self�handler   r   r   �__init__�   s    zPipeHandle.__init__c             C   s*   | j d k	rd| j  }nd}d| jj|f S )Nz	handle=%r�closedz<%s %s>)r"