Ñò
˜à"Ic           @   sf  d  d d g Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k	 l
 Z
 l Z d d k l Z l Z l Z l Z d d k l Z l Z d Z e i ƒ  Z d	 Z d	 g Z e e d
 ƒ o d
 Z e d
 g 7Z n e i d j o d Z e d g 7Z n d „  Z d „  Z d e f d „  ƒ  YZ d d d „ Z  e i d j o e! d „ Z" n d d k l# Z# e! d „ Z" d e f d „  ƒ  YZ$ d „  Z% e i d j o# d e f d „  ƒ  YZ& d „  Z' n d Z( d Z) d Z* d Z+ d „  Z, d  „  Z- d! e f d" „  ƒ  YZ. d# „  Z/ d$ „  Z0 d% e f d& „  ƒ  YZ1 d' „  Z2 d S((   t   Clientt   Listenert   PipeiÿÿÿÿN(   t   current_processt   AuthenticationError(   t   get_temp_dirt   Finalizet	   sub_debugt   debug(   t	   duplicatet   closei    t   AF_INETt   AF_UNIXt   win32t   AF_PIPEc         C   s}   |  d j o d S|  d j o t  i d d d t ƒ  ƒ S|  d j o' t  i d d	 t i ƒ  t i ƒ  f ƒ St d
 ƒ ‚ d S(   s?   
    Return an arbitrary free address for the given family
    R   t	   localhosti    R   t   prefixs	   listener-t   dirR   s   \\.\pipe\pyc-%d-%d-s   unrecognized familyN(   R   i    (   t   tempfilet   mktempR   t   ost   getpidt   _mmap_countert   nextt
   ValueError(   t   family(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   arbitrary_address0   s    c         C   sl   t  |  ƒ t j o d St  |  ƒ t j o |  i d ƒ o d St  |  ƒ t j o d St d |  ƒ ‚ d S(   s]   
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    R   s   \\R   R   s   address type of %r unrecognizedN(   t   typet   tuplet   strt
   startswithR   (   t   address(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   address_type?   s    #c           B   sS   e  Z d  Z d d d d d „ Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z	 RS(   s•   
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    i   c         C   s¤   | p | o t  | ƒ p t } | p
 t | ƒ } | d j o t | | ƒ |  _ n t | | | ƒ |  _ | d  j	 o t | t ƒ o t	 d ‚ n | |  _
 d  S(   NR   s   authkey should be a byte string(   R    t   default_familyR   t   PipeListenert	   _listenert   SocketListenert   Nonet
   isinstancet   bytest	   TypeErrort   _authkey(   t   selfR   R   t   backlogt   authkey(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   __init__Y   s    c         C   sA   |  i  i ƒ  } |  i o$ t | |  i ƒ t | |  i ƒ n | S(   sz   
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        (   R#   t   acceptR)   t   deliver_challenget   answer_challenge(   R*   t   c(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR.   h   s
    
c         C   s   |  i  i ƒ  S(   sA   
        Close the bound socket or named pipe of `self`.
        (   R#   R
   (   R*   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR
   t   s    c         C   s
   |  i  i S(    (   R#   t   _address(   R*   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   <lambda>z   s    c         C   s
   |  i  i S(    (   R#   t   _last_accepted(   R*   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR3   {   s    N(
   t   __name__t
   __module__t   __doc__R%   R-   R.   R
   t   propertyR   t   last_accepted(    (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR   R   s   		c         C   s–   | p
 t  |  ƒ } | d j o t |  ƒ } n t |  ƒ } | d j	 o t | t ƒ o t d ‚ n | d j	 o t | | ƒ t | | ƒ n | S(   s=   
    Returns a connection to the address of a `Listener`
    R   s   authkey should be a byte stringN(	   R    t
   PipeClientt   SocketClientR%   R&   R'   R(   R0   R/   (   R   R   R,   R1   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR    ~   s    c         C   s³   |  of t  i ƒ  \ } } t i t i | i ƒ  ƒ ƒ } t i t i | i ƒ  ƒ ƒ } | i ƒ  | i ƒ  n= t i ƒ  \ } } t i | d t	 ƒ} t i | d t	 ƒ} | | f S(   sL   
        Returns pair of connection objects at either end of a pipe
        t   writablet   readable(
   t   sockett
   socketpairt   _multiprocessingt
   ConnectionR   t   dupt   filenoR
   t   pipet   False(   t   duplext   s1t   s2t   c1t   c2t   fd1t   fd2(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR   ”   s    
i   (   R   c      	   C   s[  t  d ƒ } |  o* t i } t i t i B} t t } } n  t i } t i } d t } } t i | | t i t i	 Bt i
 Bd | | t i t i ƒ } t i | | d t i t i d t i ƒ } t i | t i	 d d ƒ y t i | t i ƒ Wn3 t j
 o' } | i d t i j o ‚  q'n Xt i | d |  ƒ}	 t i | d |  ƒ}
 |	 |
 f S(   sL   
        Returns pair of connection objects at either end of a pipe
        R   i    i   R<   R=   N(   R   R   t   PIPE_ACCESS_DUPLEXt   GENERIC_READt   GENERIC_WRITEt   BUFSIZEt   PIPE_ACCESS_INBOUNDt   CreateNamedPipet   PIPE_TYPE_MESSAGEt   PIPE_READMODE_MESSAGEt	   PIPE_WAITt   NMPWAIT_WAIT_FOREVERt   NULLt
   CreateFilet   OPEN_EXISTINGt   SetNamedPipeHandleStateR%   t   ConnectNamedPipet   WindowsErrort   argst   ERROR_PIPE_CONNECTEDR@   t   PipeConnection(   RF   R   t   openmodet   accesst   obsizet   ibsizet   h1t   h2t   eRI   RJ   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR   ©   s2    			$R$   c           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   sO   
    Representation of a socket which is bound to an address and listening
    i   c         C   s¡   t  i  t t  | ƒ ƒ |  _ |  i i | ƒ |  i i | ƒ |  i i ƒ  |  _ | |  _ d  |  _	 | d j o( t
 |  t i d | f d d ƒ|  _ n
 d  |  _ d  S(   NR   R]   t   exitpriorityi    (   R>   t   getattrt   _sockett   bindt   listent   getsocknameR2   t   _familyR%   R4   R   R   t   unlinkt   _unlink(   R*   R   R   R+   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR-   ×   s    		%c         C   sG   |  i  i ƒ  \ } |  _ t | i ƒ  ƒ } t i | ƒ } | i ƒ  | S(   N(   Ri   R.   R4   R	   RC   R@   RA   R
   (   R*   t   st   fdt   conn(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR.   æ   s
    
c         C   s/   |  i  i ƒ  |  i d  j	 o |  i ƒ  n d  S(   N(   Ri   R
   Ro   R%   (   R*   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR
   í   s    (   R5   R6   R7   R-   R.   R
   (    (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR$   Ó   s   	c         C   sÁ   t  |  ƒ } t i t t | ƒ ƒ } xk y | i |  ƒ WnP t i j
 oA } | i d t i j o t d |  ƒ ‚  n t	 i
 d ƒ q' XPq' ‚  t | i ƒ  ƒ } t i | ƒ } | i ƒ  | S(   sO   
    Return a connection object connected to the socket given by `address`
    i    s   failed to connect to address %sg{®Gáz„?(   R    R>   Rh   t   connectt   errorR]   t   errnot   ECONNREFUSEDR   t   timet   sleepR	   RC   R@   RA   R
   (   R   R   Rp   Rf   Rq   Rr   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR;   ó   s     
R"   c           B   s2   e  Z d  Z d d „ Z d „  Z e d „  ƒ Z RS(   s0   
        Representation of a named pipe
        c      	   C   s    | |  _  t i | t i t i t i Bt i Bt i t t t i	 t i
 ƒ } | g |  _ d  |  _ t d |  i  ƒ t |  t i d |  i |  i  f d d ƒ|  _ d  S(   Ns    listener created with address=%rR]   Rg   i    (   R2   R   RR   RM   RS   RT   RU   t   PIPE_UNLIMITED_INSTANCESRP   RV   RW   t   _handle_queueR%   R4   R   R   R"   t   _finalize_pipe_listenerR
   (   R*   R   R+   t   handle(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR-     s    			c      	   C   sÀ   t  i |  i t  i t  i t  i Bt  i Bt  i t t t  i	 t  i
 ƒ } |  i i | ƒ |  i i d ƒ } y t  i | t  i
 ƒ Wn3 t j
 o' } | i d t  i j o ‚  q³ n Xt i | ƒ S(   Ni    (   R   RR   R2   RM   RS   RT   RU   Ry   RP   RV   RW   Rz   t   appendt   popR[   R\   R]   R^   R@   R_   (   R*   t	   newhandleR|   Rf   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR.   )  s    c         C   s,   t  d | ƒ x |  D] } t | ƒ q Wd  S(   Ns    closing listener with address=%r(   R   R
   (   t   queueR   R|   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR{   :  s     N(   R5   R6   R7   R%   R-   R.   t   staticmethodR{   (    (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR"     s   	c         C   s·   xŽ yH t  i |  d ƒ t  i |  t  i t  i Bd t  i t  i d t  i ƒ } Wn< t j
 o0 } | i d t  i	 t  i
 f j o ‚  q‹ q XPq ‚  t  i | t  i d d ƒ t i | ƒ S(   sU   
        Return a connection object connected to the pipe given by `address`
        iè  i    N(   R   t   WaitNamedPipeRX   RN   RO   RW   RY   R\   R]   t   ERROR_SEM_TIMEOUTt   ERROR_PIPE_BUSYRZ   RT   R%   R@   R_   (   R   t   hRf   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR:   @  s    "i   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c         C   sŽ   d d  k  } t i t ƒ } |  i t | ƒ | i | | ƒ i ƒ  } |  i d ƒ } | | j o |  i t	 ƒ n |  i t
 ƒ t d ƒ ‚ d  S(   Niÿÿÿÿi   s   digest received was wrong(   t   hmacR   t   urandomt   MESSAGE_LENGTHt
   send_bytest	   CHALLENGEt   newt   digestt
   recv_bytest   WELCOMEt   FAILURER   (   t
   connectionR,   R†   t   messageRŒ   t   response(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR/   c  s    c         C   s€   d d  k  } |  i d ƒ } | t t ƒ } | i | | ƒ i ƒ  } |  i | ƒ |  i d ƒ } | t j o t d ƒ ‚ n d  S(   Niÿÿÿÿi   s   digest sent was rejected(	   R†   R   t   lenRŠ   R‹   RŒ   R‰   RŽ   R   (   R   R,   R†   R‘   RŒ   R’   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR0   p  s    t   ConnectionWrapperc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sO   | |  _  | |  _ | |  _ x- d D]% } t | | ƒ } t |  | | ƒ q" Wd  S(   NRC   R
   t   pollR   R‰   (   s   filenos   closeR•   s
   recv_bytess
   send_bytes(   t   _connt   _dumpst   _loadsRh   t   setattr(   R*   Rr   t   dumpst   loadst   attrt   obj(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR-     s    			 c         C   s#   |  i  | ƒ } |  i i | ƒ d  S(   N(   R—   R–   R‰   (   R*   R   Rp   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   sendˆ  s    c         C   s   |  i  i ƒ  } |  i | ƒ S(   N(   R–   R   R˜   (   R*   Rp   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   recv‹  s    (   R5   R6   R-   Rž   RŸ   (    (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR”   €  s   		c         C   s%   t  i |  f d  d  d  d ƒ i d ƒ S(   Ni   t   utf8(   t	   xmlrpclibRš   R%   t   encode(   R   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt
   _xml_dumps  s    c         C   s%   t  i |  i d ƒ ƒ \ \ } } | S(   NR    (   R¡   R›   t   decode(   Rp   R   t   method(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt
   _xml_loads’  s    !t   XmlListenerc           B   s   e  Z d  „  Z RS(   c         C   s+   d d  k  a  t i |  ƒ } t | t t ƒ S(   Niÿÿÿÿ(   R¡   R   R.   R”   R£   R¦   (   R*   R   (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR.   —  s    (   R5   R6   R.   (    (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyR§   –  s   c          O   s%   d d  k  a  t t |  | Ž  t t ƒ S(   Niÿÿÿÿ(   R¡   R”   R    R£   R¦   (   R]   t   kwds(    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt	   XmlClient  s    (3   t   __all__R   t   sysR>   Ru   Rw   R   t	   itertoolsR@   t   multiprocessingR   R   t   multiprocessing.utilR   R   R   R   t   multiprocessing.forkingR	   R
   RP   t   countR   R!   t   familiest   hasattrt   platformR   R    t   objectR   R%   R    t   TrueR   R   R$   R;   R"   R:   Rˆ   RŠ   RŽ   R   R/   R0   R”   R£   R¦   R§   R©   (    (    (    s7   /mit/python/lib/python2.6/multiprocessing/connection.pyt   <module>	   sZ   "			,* 	.				