
    G@d                      &   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    rej        dk    s ed           dZ ej        ej        ej                  Ze                    d           e                     ej!        ej"        d           e#                    e           e$                    d            ej        ej        ej                  Z%e%&                    e           e%'                    d(                    d                     e)                                \  Z*Z+ ede*,                    d          de+            ed            ee%d            ed ee*          z             e%-                                 e-                                  ed           dS dS dS )z,BSD socket interface communication utilities    N)get_debug_levelSTDERR      c                     	 	  || S # | $ rD}t           j        dk    rt          j        nt          j        }|j        d         |k    rY d}~J 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        6lib/python3.11/site-packages/spyder/utils/bsdsocket.pytemp_fail_retryr      sm    	3: 	 	 	&(gooENN5;EvayE!!		s    A9AAAlFc                    |r|}nt          j        |t                    }t          j        dt          |                    |z   }t          |          }|dk    r+|t          t          j        | j	        |          z  }|dk    )dS dS )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%   *   s     @		L'>??	CY009<I	NNE
!))ty)DDD !))))))    c                    |                      |           d\  }}	 t          j        dk    rr|                     t                    }t          j        d|          \  }d}t          |          |k     r+||                     |          z  }t          |          |k     +nt          t          j
        | j        t          t          j                  }t          |          t          k    rBt          j        d|          \  }t          t          j
        | j        |t          j                  }n&# t          j        $ r  t          j
        $ r d}Y nw xY w|                      d           n# |                      d           w xY w|G	 t          j        |          S # t          $ r% t           rt#          j        t&                     Y dS w xY wdS )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_packetr6   6   s   
 	OOGJD$7d??iimmGM#w//EDDd))d""		$' d))d"" &flDI&(&*<> >G7||r!!c733&v|TY'+V-?A A>   <    		<%%% 	 	 	 1#0000FF		 s<   DD) (E% ) E	E% EE% %E<F +GGc                    	 t                                            t          | |           |D ]}t          | |           t          |           t                                            S # t                                            w xY w)zCommunicate with monitor)COMMUNICATE_LOCKacquirer%   r6   release)r    commandsettingsoptions       r   communicater>   e   s    #  """T7### 	' 	'Fv&&&&4    """"  """"s   AA( (Bc                       e Zd ZdS )PacketNotReceivedN)__name__
__module____qualname__ r&   r   r@   r@      s        Dr&   r@   __main__r	   z.-- Testing standard Python socket interface --)z	127.0.0.1i'  r   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   r2   spyder.config.baser   r   r1   r   r   calcsizer+   r%   r6   Lockr8   r>   objectr@   PACKET_NOT_RECEIVEDrA   r   printaddressAF_INETSOCK_STREAMserversetblocking
setsockopt
SOL_SOCKETSO_REUSEADDRbindlistenclientconnectr   encodeacceptaccsockaddrr*   closerD   r&   r   <module>r_      s   3 2 
			             7 6 6 6 6 6 6 6  A% 	 	 	 V_S	E 	E 	E 	E& & & &V "9>##  )+ 	# 	# 	# 	#J	 	 	 	 	 	 	 	 ('))  z7d?? 	>???%v~v/ABB1&+V-@!DDDWav~v/ABB!!!(//88999 gll4&8&8&8&8$$?@@@ 	ABBBV3444-W1E1EFGGGjO ?r&   