ó
‹²,]c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z m	 Z	 e d k Z
 d d l m Z d Z d „  Z e j d ƒ Z e d	 „ Z d d
 „ Z e j ƒ  Z g  d „ Z d e f d „  ƒ  YZ e ƒ  Z e d k re j d k sd GHd Z e j e j e j ƒ Z  e  j! d ƒ e  j" e j# e j$ d ƒ e  j% e ƒ e  j& d ƒ e j e j e j ƒ Z' e' j( e ƒ e' j) d j* d ƒ ƒ e  j+ ƒ  \ Z, Z- d e, j. d ƒ e- f GHd GHe e' d ƒ d e e, ƒ GHe' j/ ƒ  e  j/ ƒ  d GHqn  d S(   s,   BSD socket interface communication utilitiesiÿÿÿÿN(   t   DEBUGt   STDERRi   (   t   picklei   c         G   sl   xe y | | Œ  SWq |  k
 rc } t  j d k r; t j n t j } | j d | k r] q n  ‚  q Xq Wd S(   s?   Retry to execute function, ignoring EINTR error (interruptions)t   nti    N(   t   ost   namet   errnot   WSAEINTRt   EINTRt   args(   t   errort   funR	   t   et   eintr(    (    s5   lib/python2.7/site-packages/spyder/utils/bsdsocket.pyt   temp_fail_retry   s    !t   lc         C   s|   | r | } n t  j | t ƒ } t j d t | ƒ ƒ | } t | ƒ } x, | d k rw | t t j |  j	 | ƒ 8} qL Wd S(   s   Write *data* to socket *sock*R   i    N(
   R   t   dumpst   PICKLE_HIGHEST_PROTOCOLt   structt   packt   lenR   t   socketR
   t   send(   t   sockt   datat   already_pickledt	   sent_datat   nsend(    (    s5   lib/python2.7/site-packages/spyder/utils/bsdsocket.pyt   write_packet*   s    	c         C   s…  |  j  | ƒ d \ } } z	yÒ t j d k r‡ |  j t ƒ } t j d | ƒ \ } d } x’ t | ƒ | k  rƒ | |  j | ƒ 7} q[ Wnf t	 t
 j |  j t t
 j ƒ } t | ƒ t k rí t j d | ƒ \ } t	 t
 j |  j | t
 j ƒ } n  Wn0 t
 j k
 r‚  n t
 j k
 r d } n XWd |  j  d ƒ X| d k	 ry t j | ƒ SWqt k
 r}t ryt j d t ƒ n  d SXn  d S(   sO   
    Read data from socket *sock*
    Returns None if something went wrong
    R   R   t    Nt   file(   NN(   t
   settimeoutt   NoneR   R   t   recvt   SZR   t   unpackR   R   R   R
   t   MSG_WAITALLt   timeoutR   t   loadst	   Exceptiont   DEBUG_EDITORt	   tracebackt	   print_excR   (   R   R%   t   dlenR   t   datalen(    (    s5   lib/python2.7/site-packages/spyder/utils/bsdsocket.pyt   read_packet6   s8     c         C   sU   zC t  j ƒ  t |  | ƒ x | D] } t |  | ƒ q! Wt |  ƒ SWd t  j ƒ  Xd S(   s   Communicate with monitorN(   t   COMMUNICATE_LOCKt   acquireR   R-   t   release(   R   t   commandt   settingst   option(    (    s5   lib/python2.7/site-packages/spyder/utils/bsdsocket.pyt   communicated   s    
t   PacketNotReceivedc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s5   lib/python2.7/site-packages/spyder/utils/bsdsocket.pyR5   ‰   s   t   __main__R   s.   -- Testing standard Python socket interface --s	   127.0.0.1i'  i    i   s   data to be catcheds   utf-8s   ..got "%s" from %si   s1   -- Testing BSD socket write_packet/read_packet --s   a tiny piece of datas   ..got "%s" from read_packet()s   -- Done.(   s	   127.0.0.1i'  (0   t   __doc__R   R   R   t	   threadingR   R)   t   spyder.config.baseR    R   R(   t   spyder.py3compatR   R   R   t   calcsizeR"   t   FalseR   R    R-   t   LockR.   R4   t   objectR5   t   PACKET_NOT_RECEIVEDR6   R   t   addresst   AF_INETt   SOCK_STREAMt   servert   setblockingt
   setsockoptt
   SOL_SOCKETt   SO_REUSEADDRt   bindt   listent   clientt   connectR   t   encodet   acceptt   accsockt   addrR!   t   close(    (    (    s5   lib/python2.7/site-packages/spyder/utils/bsdsocket.pyt   <module>   sL   	*%		

