o
    jZhp                     @   s$  d Z ddlZddlZdZdd Ze ZdZer(eddZej	ej
fZe e_	e_
dd	 Zed
 dd Zdd ZdddZedkrkddlZeejdkrRejd ZndZddlmZ edZeeeZeedd dS edkre d ZejjZe ZeeeZe Z e!e  ee dS dS )z
    start socket based minimal readline exec server

    it can exeuted in 2 modes of operation

    1. as normal script, that listens for new connections

    2. via existing_gateway.remote_exec (as imported module)

    Nzsocket_readline_exec_server-1.2c                  C   s(   zdd l } W | S  ty   d } Y | S w )Nr   )fcntlImportError)r    r   R/var/www/html/lang_env/lib/python3.10/site-packages/execnet/script/socketserver.py	get_fcntl   s   
r   z/tmp/execnet-socket-pyout.logwc                  G   s   t ddd | D  d S )N c                 s   s    | ]}t |V  qd S )N)str).0argr   r   r   	<genexpr>'   s    zprint_.<locals>.<genexpr>)printjoin)argsr   r   r   print_&   s   r   z/def exec_(source, locs):
    exec(source, locs)c              	   C   s   t td|   |  \}}t td|  |d}t d |  }|  ||td}t	|}|rUt
|d dd}t td	 zt|| W t td
 d S t td
 w d S )NzEntering Accept loopzgot new connection from %s %srbzreading line)
clientsockaddress	execmodel
z<socket server>execzcompiled source, executingzfinished executing code)r   prognamegetsocknameacceptmakefilereadlinerstripcloser   evalcompileexec_)
serversockr   r   Z
clientfilesourcegcor   r   r   exec_from_one_connection0   s    

r%   c                 C   s   |j }t| tr| d\}}|t|f} | |j|j}ttdr8t|	 tj
}t|	 tj|tjB  tjdkrKtjdkrK||j|jd ||  |d |S )N:
FD_CLOEXECposixcygwin      )socket
isinstancer	   splitintAF_INETSOCK_STREAMhasattrr   filenoF_GETFDF_SETFDr'   osnamesysplatform
setsockopt
SOL_SOCKETSO_REUSEADDRbindlisten)hostportr   r,   hostportr!   oldr   r   r   bind_and_listenF   s   



rC   Fc              	   C   s   t  }zE	 zt|  W n( ttfy     ty4   tr'dd l}|  nt	
 }td|d  Y nw t | |s=nqW td | d d S td | d w )Nr*   r   zgot exceptionzleaving socketserver execloop   )r6   getcwdr%   KeyboardInterrupt
SystemExitBaseExceptiondebug	traceback	print_excr8   exc_infor   chdirshutdown)r!   loopZexecute_pathrJ   excinfor   r   r   startserverY   s0   

rQ   __main__r*   z:8888)get_execmodelthreadT)rO   Z__channelexec__Zchannel)F)"__doc__r6   r8   r   r   r   rI   openfstdoutstderrrB   r   r   r%   rC   rQ   __name__lenargvr?   Zexecnet.gateway_baserS   r   r!   globalsZchanZgatewayZreceiveZbindnamesockr   rA   sendr   r   r   r   <module>   sH   





