o
    a                     @   s  d Z 	 ddlZddlZddlZddlT ddlT ddlT ejejdfgZ	e
edr2e	ejejdf e
edrAe	ejejdf e
edrPe	ejejd	f e
ed
r_e	ejejdf dag dZG dd dZdd Zdd Zdd Zdd Zdd ZdS )z

    N   )*SO_KEEPALIVETCP_KEEPIDLE   TCP_KEEPINTVL
   TCP_KEEPCNT   )DEFAULT_SOCKET_OPTIONsock_optsetdefaulttimeoutgetdefaulttimeoutrecv	recv_linesendc                   @   s   e Zd Zdd ZdS )r   c                 C   s.   |d u rg }|d u ri }|| _ || _d | _d S N)sockoptsslopttimeout)selfr   r    r   3/usr/lib/python3/dist-packages/websocket/_socket.py__init__1   s   
zsock_opt.__init__N)__name__
__module____qualname__r   r   r   r   r   r   /   s    r   c                 C   s   | a dS )z
    Set the global timeout setting to connect.

    Parameters
    ----------
    timeout: int or float
        default socket timeout time (in seconds)
    N_default_timeout)r   r   r   r   r   ;   s   
r   c                   C   s   t S )z
    Get default timeout

    Returns
    ----------
    _default_timeout: int or float
        Return the global timeout setting (in seconds) to connect.
    r   r   r   r   r   r   H   s   	r   c              
      s   st d fdd}z dkr }n| }W n2 tjy3 } zt|}t|d }~w tyP } zt|}t|t	rKd|v rKt| d }~ww |sWt d|S )Nsocket is already closed.c               
         z  W S  ty   Y n' tjy5 }  zt| }|d u r  |tjks*|tjkr+ W Y d } ~ nd } ~ ww t	 }|
tj | }|  |rS  S d S r   )r   ZSSLWantReadErrorsocketerrorextract_error_codeerrnoEAGAINEWOULDBLOCK	selectorsDefaultSelectorregisterZ
EVENT_READselect
gettimeoutclose)exc
error_codeselrbufsizesockr   r   _recvX   (   
zrecv.<locals>._recvr   	timed outz#Connection to remote host was lost.)
"WebSocketConnectionClosedExceptionr+   r   r!   r   extract_err_messageWebSocketTimeoutExceptionZSSLError
isinstancestr)r3   r2   r4   Zbytes_emessager   r1   r   r   T   s0   r   c                 C   s0   g }	 t | d}|| |dkrnqd|S )NTr      
    )r   appendjoin)r3   linecr   r   r   r      s   


r   c              
      s   t  tr
 d std fdd}z dkr$ W S | W S  tjy< } zt|}t	|d }~w t
yY } zt|}t |trTd|v rTt	| d }~ww )Nzutf-8r   c               
      r    r   )r   ZSSLWantWriteErrorr!   r"   r#   r$   r%   r&   r'   r(   r)   ZEVENT_WRITEr*   r+   r,   )r-   r.   r/   wdatar3   r   r   _send   r5   zsend.<locals>._sendr   r6   )r:   r;   encoder7   r+   r   r!   r   r8   r9   	Exception)r3   rF   rG   r<   r=   r   rE   r   r      s(   

r   )__doc__r$   r'   r!   _exceptionsZ_ssl_compatZ_utilsZSOL_TCPZTCP_NODELAYr   hasattrr@   Z
SOL_SOCKETr   r   r   r	   r   __all__r   r   r   r   r   r   r   r   r   r   <module>   s2    



/
