3 f @ s d Z ddlZejdkredddlZddlZddlZddlZddlZddl Z ddl Z ddlZddddd gZd Z e jZe jZej ZeedrejZnejejdfddZdde dddZG dd d ZG dd de jZdS )z* Various Windows specific bits and pieces NZwin32z win32 only socketpairpipePopenPIPE PipeHandlei c C s | t jkrd}n| t jkr d}ntd|t jkr:td|dkrJtdt 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 )zA 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)socketAF_INETZAF_INET6 ValueErrorSOCK_STREAMZbindZlistenZgetsocknameZsetblockingZconnectBlockingIOErrorInterruptedErrorZacceptclose) ZfamilytypeprotohostZlsockZaddrZportZcsockZssock_ r :/opt/alt/python36/lib64/python3.6/asyncio/windows_utils.pyr % s8 FT)duplex overlappedbufsizec C s" t jdtj ttf d}| r>tj}tjtj B }|| }}ntj }tj }d| }}|tjO }|d rp|tjO }|d rtj}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 )tempfileZmktemposgetpidnext _mmap_counter_winapiZPIPE_ACCESS_DUPLEXZGENERIC_READZ GENERIC_WRITEZPIPE_ACCESS_INBOUNDZFILE_FLAG_FIRST_PIPE_INSTANCEZFILE_FLAG_OVERLAPPEDZCreateNamedPipeZ PIPE_WAITZNMPWAIT_WAIT_FOREVERZNULLZ CreateFileZ OPEN_EXISTINGZConnectNamedPipeZGetOverlappedResultCloseHandle)r r r ZaddressZopenmodeaccessZobsizeZibsizeZflags_and_attribsZh1Zh2Zovr r r r S s@ c @ s\ e Zd ZdZdd Zdd Zedd Zdd Ze j d ddZd d Zdd Z dd ZdS )r zWrapper 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)selfhandler r r __init__ s zPipeHandle.__init__c C s* | j d k rd| j }nd}d| jj|f S )Nz handle=%rclosedz<%s %s>)r" __class____name__)r# r$ r r r __repr__ s zPipeHandle.__repr__c C s | j S )N)r" )r# r r r r$ s zPipeHandle.handlec C s | j d krtd| j S )NzI/O operatioon on closed pipe)r" r )r# r r r fileno s zPipeHandle.fileno)r c C s | j d k r|| j d | _ d S )N)r" )r# r r r r r s zPipeHandle.closec C s* | j d k r&tjd| t| d | j d S )Nzunclosed %r)source)r" warningswarnResourceWarningr )r# r r r __del__ s zPipeHandle.__del__c C s | S )Nr )r# r r r __enter__ s zPipeHandle.__enter__c C s | j d S )N)r )r# tvtbr r r __exit__ s zPipeHandle.__exit__N)r( __module____qualname____doc__r% r) propertyr$ r* r r r r/ r0 r4 r r r r r s c s" e Zd ZdZd fdd Z ZS )r zReplacement for subprocess.Popen using overlapped pipe handles. The stdin, stdout, stderr are None or instances of PipeHandle. Nc s| d } }}d } } }|t kr@tddd\}} tj|tj}n|}|t krhtdd\} } tj| d}n|}|t krtd d\}}tj|d}n|tkr|}n|}zy t j|f|||d| W n4 x$| | |fD ]}|d k rt j | qW Y n>X | d k rt| | _| d k r"t| | _ |d k r6t|| _W d |t krNtj| |t krbtj| |t krvtj| X d S ) NFT)r r )r r )stdinstdoutstderr)FT)TF)TF)r r msvcrtZopen_osfhandler O_RDONLYSTDOUTsuperr% r r r r9 r: r; r )r# argsr9 r: r; kwdsZ stdin_rfdZ stdout_wfdZ stderr_wfdZstdin_whZ stdout_rhZ stderr_rhZstdin_rhZ stdout_whZ stderr_whh)r' r r r% sH zPopen.__init__)NNN)r( r5 r6 r7 r% __classcell__r r )r' r r s )TT)r7 sysplatformImportErrorr itertoolsr<