
    Je                         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Zddlm	Z	m
Z
  e	       dk\  ZdZd Z ej                  d      ZddZdd	Z ej$                         Zg fd
Z G d de      Z e       Zedk(  roej2                  dk(  s^ ed       dZ ej                  ej8                  ej:                        Zej?                  d       ejA                  ejB                  ejD                  d       ejG                  e       ejI                  d        ej                  ej8                  ej:                        Z%e%jM                  e       e%jO                  djQ                  d             ejS                         \  Z*Z+ ede*jY                  d      de+        ed        ee%d        ed ee*      z         e%j[                          ej[                           ed       yyy)z,BSD socket interface communication utilities    N)get_debug_levelSTDERR      c                     	 	  || S # | $ rP}t         j                  dk(  rt        j                  nt        j                  }|j
                  d   |k(  rY d}~V d}~ww xY w)z?Retry to execute function, ignoring EINTR error (interruptions)ntr   N)osnameerrnoWSAEINTREINTRargs)errorfunr   eeintrs        8/usr/lib/python3/dist-packages/spyder/utils/bsdsocket.pytemp_fail_retryr      sS    
	: 	&(ggoENN5;;EvvayE!		s    AAAAAlc                    |r|}nt        j                  |t              }t        j                  dt        |            |z   }t        |      }|dkD  r/|t        t        j                  | j                  |      z  }|dkD  r.yy)zWrite *data* to socket *sock*r   r   N)
pickledumpsPICKLE_HIGHEST_PROTOCOLstructpacklenr   socketr   send)sockdataalready_pickled	sent_datansends        r   write_packetr$   *   sh    	LL'>?	CY09<I	NE
!)tyy)DD !)    c                 ~   | j                  |       d\  }}	 t        j                  dk(  ra| j                  t              }t        j                  d|      \  }d}t        |      |k  r|| j                  |      z  }t        |      |k  r#nt        t        j                  | j                  t        t        j                        }t        |      t        k(  rLt        j                  d|      \  }t        t        j                  | j                  |t        j                        }| j                  d       |	 t        j                  |      S y# t        j                  $ r  t        j                  $ r d}Y Tw xY w# | j                  d       w xY w# t        $ r# t         rt#        j$                  t&               Y yw xY w)zO
    Read data from socket *sock*
    Returns None if something went wrong
    )NNr   r   r%   N)file)
settimeoutr	   r
   recvSZr   unpackr   r   r   r   MSG_WAITALLtimeoutr   loads	ExceptionDEBUG_EDITOR	traceback	print_excr   )r   r-   dlenr    datalens        r   read_packetr5   6   se   
 	OOGJD$77d?iimGMM#w/EDDd)d"		$' d)d" &fllDII&(&*<*<>G7|r!c73&v||TYY'+V-?-?A 		<<%%  >> <<  	  	##0		s=   A2E BE 6F (E74E: 6E77E: :F)F<;F<c                     	 t         j                          t        | |       |D ]  }t        | |        t        |       t         j	                          S # t         j	                          w xY w)zCommunicate with monitor)COMMUNICATE_LOCKacquirer$   r5   release)r   commandsettingsoptions       r   communicater=   e   sX    #  "T7# 	'Fv&	'4   "  "s   =A A*c                       e Zd Zy)PacketNotReceivedN)__name__
__module____qualname__ r%   r   r?   r?      s    r%   r?   __main__r   z.-- Testing standard Python socket interface --)z	127.0.0.1i'     zdata to be catchedzutf-8z..got "i   z" from z1-- Testing BSD socket write_packet/read_packet --za tiny piece of dataz..got "%s" from read_packet()z-- Done.)F)N).__doc__r	   r   r   r   	threadingr   r1   spyder.config.baser   r   r0   r   r   calcsizer*   r$   r5   Lockr7   r=   objectr?   PACKET_NOT_RECEIVEDr@   r
   printaddressAF_INETSOCK_STREAMserversetblocking
setsockopt
SOL_SOCKETSO_REUSEADDRbindlistenclientconnectr   encodeacceptaccsockaddrr)   closerC   r%   r   <module>r_      s   3 
       7 A% 	 V__S	E&V "9>>#  )+ 	#J	 	 ()  z77d? 	>?%v~~v/A/AB1&++V-@-@!DWav~~v/A/AB!(//89 gll4&8$?@ 	ABV34-W1EFGjM  r%   