U
    gN                     @   s|  d dl Z d dlZd dlZd dlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlmZmZ ejejdfgZeedreejejdf eedreejejd	f eed
reejejdf eedreejejdf dadddddddgZG dd dZeeedf ddddZeeedf dddZejee dddZ!eje dddZ"ejee e#f edddZ$dS )     N)Union   )"WebSocketConnectionClosedExceptionWebSocketTimeoutException)SSLErrorSSLWantReadErrorSSLWantWriteError)extract_error_codeextract_err_messageSO_KEEPALIVETCP_KEEPIDLE   TCP_KEEPINTVL
   TCP_KEEPCNT   DEFAULT_SOCKET_OPTIONsock_optsetdefaulttimeoutgetdefaulttimeoutrecv	recv_linesendc                   @   s   e Zd ZeeddddZdS )r   N)sockoptssloptreturnc                 C   s.   |d krg }|d kri }|| _ || _d | _d S N)r   r   timeout)selfr   r    r   5/tmp/pip-unpacked-wheel-0xk_xrpx/websocket/_socket.py__init__8   s    zsock_opt.__init__)__name__
__module____qualname__listdictr!   r   r   r   r    r   7   s   )r   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   B   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   O   s    	)sockbufsizer   c              
      s   st d fdd}z" dkr4 }n| }W n tk
rX   tdY nz tjk
r } zt|}t|W 5 d }~X Y nH tk
r } z*t|}t	|t
rd|krt|n W 5 d }~X Y nX |st d|S )Nsocket is already closed.c               
      s   z  W S  tk
r    Y n> tjk
r\ }  zt| }|tjtjfkrL W 5 d } ~ X Y nX t	 }|
tj | }|  |r  S d S r   )r   r   socketerrorr	   errnoEAGAINEWOULDBLOCK	selectorsDefaultSelectorregister
EVENT_READselect
gettimeoutclose)exc
error_codeselrr*   r)   r   r    _recv_   s    zrecv.<locals>._recvr   zConnection timed out	timed outz#Connection to remote host was lost.)r   r6   r   TimeoutErrorr   r,   r   r
   r   
isinstancestr)r)   r*   r=   Zbytes_emessager   r<   r    r   [   s(    

)r)   r   c                 C   s.   g }t | d}|| |dkrq$qd|S )Nr      
    )r   appendjoin)r)   linecr   r   r    r      s    

)r)   datar   c              
      s   t  tr d s td fdd}z$ dkrH W S | W S W nz tjk
r } zt|}t	|W 5 d }~X Y nH t
k
r } z*t|}t |trd|krt	|n W 5 d }~X Y nX d S )Nzutf-8r+   c               
      s   z  W S  tk
r    Y nH tjk
rf }  z(t| }|d krD |tjtjfkrV W 5 d } ~ X Y nX t	 }|
tj | }|  |r  S d S r   )r   r   r,   r-   r	   r.   r/   r0   r1   r2   r3   EVENT_WRITEr5   r6   r7   )r8   r9   r:   wrJ   r)   r   r    _send   s     zsend.<locals>._sendr   r>   )r@   rA   encoder   r6   r   r,   r   r
   r   	Exception)r)   rJ   rN   rB   rC   r   rM   r    r      s"    


)%r.   r1   r,   typingr   _exceptionsr   r   Z_ssl_compatr   r   r   _utilsr	   r
   SOL_TCPTCP_NODELAYr   hasattrrF   
SOL_SOCKETr   r   r   r   r(   __all__r   intfloatr   r   bytesr   r   rA   r   r   r   r   r    <module>   s<   



.
