
    Mh7                     4   d Z ddlZddlZddlZddlmZmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ dd	lmZ d
 xZZd Zd Zd Zd Zd Zd Zd Zd Z ej        d          Zedk    Z  ej!                    Z"ddZ#ddZ$ddZ% G d d          Z&ddgZ'dS )zzmq Socket class    N)SocketOption_OptType)ZMQError	_check_rc_check_version   )ffi)lib)Frame)_retry_sys_callc                 ,    t          j        d|           S )Nzsize_t*)r	   newlengths    W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/zmq/backend/cffi/socket.py<lambda>r      s    F)C)C     c                  l    t          j        d          t          t          j        d                    fS Nz	uint64_t*uint64_tr	   r   nspsizeof r   r   new_uint64_pointerr      s)    7;SZ
%;%;!<!<<<r   c                  l    t          j        d          t          t          j        d                    fS Nzint64_t*int64_tr   r   r   r   new_int64_pointerr      s)    7:CJy$9$9 : :::r   c                  l    t          j        d          t          t          j        d                    fS Nzint*intr   r   r   r   new_int_pointerr#      s'    76??C
5 1 12222r   c                 |    t          j        d| dd          t          t          j        d          | z            fS )Nchar[d]charr   r   s    r   new_binary_datar)   !   s=    7&6&&&&''SZ-?-?&-H)I)IIIr   c                 T    t          j        d|           t          j        d          fS r   r	   r   r   vals    r   value_uint64_pointerr.   %   s#    7;$$cj&<&<<<r   c                 T    t          j        d|           t          j        d          fS r   r+   r,   s    r   value_int64_pointerr0   )   s#    7:s##SZ	%:%:::r   c                 T    t          j        d|           t          j        d          fS r!   r+   r,   s    r   value_int_pointerr2   -   s#    763E!2!222r   c                 j    t          j        d|dz   dd|           t          j        d          |z  fS )Nr%   r   r&   r'   r(   r+   )r-   r   s     r   value_binary_datar4   1   s;    7*6A:****C00#*V2D2Dv2MMMr   ZMQ_FD_T   c                     t          | dt          j                  }|t          j        k    st          r|t          j        k    rt                      S |t          j        k    rt          |          S t                      S N	_opt_type)
getattrr   r"   int64ZMQ_FD_64BITfdr   bytesr)   r#   )optionr   opt_types      r   new_pointer_from_optrA   ;   sh    v{HL99H8>!!l!x8;7N7N """	X^	#	#v&&&    r   c                     	 t          |           } | j        }n# t          $ r t          j        }Y nw xY w|t          j        k    rt          j        ||          d d          S t	          |d                   S )Nr   )r   r9   
ValueErrorr   r"   r>   r	   buffer)r?   opt_pointerr   r@   s       r   value_from_opt_pointerrF   G   s    $f%% #        <	  8>!!z+v..qqq11;q>"""s    22c                    t          | dt          j                  }|t          j        k    st          r|t          j        k    rt          |          S |t          j        k    rt          ||          S t          |          S r8   )
r:   r   r"   r;   r<   r=   r0   r>   r4   r2   )r?   valuer   r@   s       r   initialize_opt_pointerrI   X   sl    v{HL99H8>!!l!x8;7N7N"5)))	X^	#	# /// '''r   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
dZddZed             Zd Zed             ZddZd	 Zd
 Zd Zd Zd Zd Zd Zd ZddZddZddddededefdZddZdS ) SocketNFr   c                 B   |t           j        }|| _        || _        d x| _        | _        |r"t          j        d|          | _        d| _	        n&d| _	        t          j        |j        |          | _        | j        t          j        k    rt                      d| _        d S )Nvoid *TF)zmqCOPY_THRESHOLDcopy_thresholdcontext_draft_poller_draft_poller_ptrr	   cast_zmq_socket_shadowC
zmq_socket_zmq_ctxNULLr   _closed)selfrQ   socket_typeshadowrP   s        r   __init__zSocket.__init__m   s    ! /N,6::T3 	K"x&99DDLL DL |G,<kJJDsx''**r   c                 P    t          t          j        d| j                            S )z+The address of the underlying libzmq socketsize_t)r"   r	   rT   rU   r\   s    r   
underlyingzSocket.underlying~   s!     38Hd&677888r   c                     | j         rdS 	 |                     t          j                   nP# t          $ rC}|j        t          j        k    rd| _         Y d}~dS |j        t          j        k    rn Y d}~nd}~ww xY wdS )zthorough check of whether the socket has been closed,
        even if by another entity (e.g. ctx.destroy).

        Only used by the `closed` property.

        returns True if closed, False otherwise
        TNF)r[   getrN   TYPEr   errnoENOTSOCKETERM)r\   es     r   _check_closed_deepzSocket._check_closed_deep   s     < 	4		HHSX 	 	 	w#,&&#tttttCI%% 	 us   + 
A8A3A33A8c                 *    |                                  S N)rk   rb   s    r   closedzSocket.closed   s    &&(((r   c                 T   d}| j         st          | d          rw| j        't          j        | j                  }d x| _        | _        | j        ;| |                     t          j	        |           t          j
        | j                  }d| _         |dk     rt          |           d S d S )Nr   rU   T)r[   hasattrrS   rW   zmq_poller_destroyrR   rU   setrN   LINGER	zmq_closer   )r\   lingerrcs      r   closezSocket.close   s    | 		 m < < 		 %1)$*@AA>BB"T%;+%HHSZ000[!122DL66bMMMMM 6r   c                    t          |t                    r|                    d          }n|}t          |t                    r|                    d          }t          j        | j        |          }|dk     rt          rmt          j	                    t          j        k    rL|                    dd          d         }d| dt           d}t          t          j	                    |	          t          j	                    t          j        k    rD|                    dd          d         }d
| d}t          t          j	                    |	          t          |           d S d S )Nutf8r   z://r   z
ipc path "z" is longer than z+ characters (sizeof(sockaddr_un.sun_path)).)msgz(No such file or directory for ipc path "z".)
isinstancestrencoder>   decoderW   zmq_bindrU   IPC_PATH_MAX_LEN	zmq_errno	errno_modENAMETOOLONGsplitr   ENOENTr   )r\   address	address_brv   pathr{   s         r   bindzSocket.bind   sU   gs## 	 v..IIIgu%% 	/&&v..GZ()4466 AKMMY5K$K$K}}UA..r2A A A8H A A A  q{}}#6666)"222}}UA..r2IIIIq{}}#6666" 6r   c                     t          |t                    r|                    d          }t          j        | j        |          }t          |           d S Nry   )r|   r}   r~   rW   
zmq_unbindrU   r   r\   r   rv   s      r   unbindzSocket.unbind   sH    gs## 	-nnV,,G\$*G44"r   c                     t          |t                    r|                    d          }t          j        | j        |          }t          |           d S r   )r|   r}   r~   rW   zmq_connectrU   r   r   s      r   connectzSocket.connect   sH    gs## 	-nnV,,G]4+W55"r   c                     t          |t                    r|                    d          }t          j        | j        |          }t          |           d S r   )r|   r}   r~   rW   zmq_disconnectrU   r   r   s      r   
disconnectzSocket.disconnect   sI    gs## 	-nnV,,Gd.88"r   c           	         d }t          |t                    rt          d          	 t          |          }|j        }n# t
          $ r t          j        }Y nw xY wt          |t                    r1|t          j        k    rt          d|           t          |          }t          |||          \  }}t          t          j        | j        |t          j        d|          |           d S )Nzunicode not allowed, use bytesznot a bytes sockopt: void*)r|   r}   	TypeErrorr   r9   rC   r   r"   r>   lenrI   r   rW   zmq_setsockoptrU   r	   rT   )r\   r?   rH   r   r@   c_value_pointerc_sizets          r   rr   z
Socket.set   s   eS!! 	><===	(!&))F 'HH  	$ 	$ 	$  |HHH		$ eU## 	 8>)) @ @ @AAAZZF#9&%#P#P HWo..	
 	
 	
 	
 	
s   ? AAc                    	 t          |          }|j        }n# t          $ r t          j        }Y nw xY w|t
          j        k    r[| j        Tt          |          \  }}t          j
        | j        t          j        d|                     t	          |d                   S t          |d          \  }}	 t          t          j        | j        |||           n# t           $ r}|t           j        k    r|j        t
          j        j        k    r|                     t           j                  rkt-          dd           t          j        d          st1          d          t3          j        t
          j                                        d	
           t          j        d          | _        t          j                    x| j        d<   | _        | j        t          j         k    rd x| _        | _         t          j!        | j        | j        t          j         t
          j"        t
          j#        z            }tI          |           t          j
        | j        t          j        d|                    }tI          |           t	          |d                   cY d }~S  d }~ww xY w|d         }tK          |||          }	|t
          j         j&        k    r/|t          j'        k    r|	(                    d          r
|	d d         }	|	S )Nr   r      r   )         z)draft socket FD support via zmq_poller_fddraftz'libzmq must be built with draft supportr   )
stacklevelzvoid*[1]rM       rz   ))r   r9   rC   r   r"   rN   FDrR   rA   rW   zmq_poller_fdr	   rT   r   zmq_getsockoptrU   r   rg   ErrnoEINVALre   THREAD_SAFEr   hasRuntimeErrorwarningswarnerrorDraftFDWarningr   rS   zmq_poller_newrZ   zmq_poller_addPOLLINPOLLOUTr   rF   
ROUTING_IDr>   endswith)
r\   r?   r@   r   _c_sizet_pointerrj   rv   szvs
             r   re   z
Socket.get   s   	(!&))F 'HH  	$ 	$ 	$  |HHH		$ SV 2 >!5f!=!=OQOD./0R0RSSSq)***+?s+S+S+S()	       !	 !	 !	,/))Gsy///HH\566 0 y*UVVVww'' R&'PQQQci6688QGGGG *-)<)<&ABAQASASS&q)D,>%11BFFD*T-?%&$HJ,	  "_&?(K(K  "?1-........C!	F Q"6?B??c&111HN**

5!! + #2#As1    225"C J!$F1JJ!JJ!c                    t          j        d          }t          |t                    s!t	          |                                          }t          j        d|          }t          j        |t          |                    }t          |           t          j
        t          j        |          |t          |                     t          t          j        || j        |           t          j        |          }t          |           dS )zSend a copy of a bufferable
zmq_msg_t*zchar[]N)r	   r   r|   r>   
memoryviewtobytesrW   zmq_msg_init_sizer   r   memcpyzmq_msg_datar   zmq_msg_sendrU   zmq_msg_close)r\   bufflagszmq_msg	c_messagerv   rc2s          r   
_send_copyzSocket._send_copy:  s    ',''#u%% 	,S//))++CGHc**	 #c((33"	(()SXX>>>1A5IIIog&&#r   c                     |                                 }|j        }t          t          j        || j        |           |j        }|                                 |S )z1Send a Frame on this socket in a non-copy manner.)	fast_copyr   r   rW   r   rU   trackerrw   )r\   framer   
frame_copyr   r   s         r   _send_framezSocket._send_frameI  sS     __&&
$1A5III$r   c                 &   t          |t                    rt          d          |r+t          |t                    s|                     ||          S d}t          |t                    r|r|j        st          d          |}na| j        rAt          |          }|j	        | j        k     r"|                     ||           t          j        S t          ||| j                  }d}|                     ||          }|r|                                 |S )Nz.Message must be in bytes, not a unicode objectFzNot a tracked message)trackrP   T)r|   r}   r   r   r   r   rC   rP   r   nbytesrN   _FINISHED_TRACKERr   rw   )	r\   datar   copyr   close_framer   r   r   s	            r   sendzSocket.sendT  s   dC   	NLMMM 	
4// 	??4///K$&& # > >$%<===& 5$T**CzD$777U333"44d%@STTT"&&ue44G Nr   Tc                    |r)t          j        d          }t          j        |           nt	          j        |          }|j        }	 t          t          j        || j	        |           n%# t          $ r |rt          j        |            w xY w|s|S t          j        t          j        |          t          j        |                    }|d d          }t          j        |          }t          |           |S )Nr   )r   )r	   r   rW   zmq_msg_initrN   r   r   r   zmq_msg_recvrU   	Exceptionr   rD   r   zmq_msg_sizer   )	r\   r   r   r   r   r   _buffer_bytesrv   s	            r   recvzSocket.recvo  s     	$gl++GN7####IE***EmG	ANGT5EuMMMM 	 	 	 )(((	
  	L*Q^G44anW6M6MNN_W%%"s   	!A+ +"B)r   r   r   r   returnc                  t          |          }|j        st          d          |j        rt          d          |dk     rt	          d|d          |j        }|dk    r|}n||k    rt	          d|d| d          t          j        |          }t          t          j
        | j        |||          }t          |           |S )Nz%Can only recv_into contiguous buffersz Cannot recv_into readonly bufferr   znbytes=z must be non-negativez too big for memoryview of B)r   
contiguousBufferErrorreadonlyrC   r   r	   from_bufferr   rW   zmq_recvrU   r   )r\   rD   r   r   view
view_bytesc_bufrv   s           r   	recv_intozSocket.recv_into  s    &!! 	GEFFF= 	B@AAAA::>>>>???[
Q;;FFj  QQQJQQQRRR%%!!*d.>vuUU"	r   rz   c                     |dk     rt           j        }|t          j        }t	          |t
                    r|                    d          }t          j        | j	        ||           dS )a   s.monitor(addr, flags)

        Start publishing socket events on inproc.
        See libzmq docs for zmq_monitor for details.

        Note: requires libzmq >= 3.2

        Parameters
        ----------
        addr : str
            The inproc url used for monitoring. Passing None as
            the addr will cause an existing socket monitor to be
            deregistered.
        events : int [default: zmq.EVENT_ALL]
            The zmq event bitmask for which events will be sent to the monitor.
        r   Nry   )
rN   	EVENT_ALLr	   rZ   r|   r}   r~   rW   zmq_socket_monitorrU   )r\   addreventss      r   monitorzSocket.monitor  sa    " A::]F<8DdC   	';;v&&D	T-tV<<<<<r   )NNr   Nrm   )r   FF)r   TF)rz   )__name__
__module____qualname__rQ   r]   rU   r[   _refrV   rR   rS   rP   r_   propertyrc   rk   rn   rw   r   r   r   r   rr   re   r   r   r   r   r"   r   r   r   r   r   rK   rK   b   s       GKKGDGMN   " 9 9 X9  , ) ) X)     .      
 
 
<E E EN  	 	 	   6   0 56A   c c #    $= = = = = =r   rK   r   )r   )(__doc__rg   r   r   rN   zmq.constantsr   r   	zmq.errorr   r   r   _cffir	   r
   rW   messager   utilsr   r   new_sizet_pointerr   r   r#   r)   r.   r0   r2   r4   r   _fd_sizer<   get_ipc_path_max_lenr   rA   rF   rI   rK   __all__r   r   r   <module>r     s    
      



 0 0 0 0 0 0 0 0 9 9 9 9 9 9 9 9 9 9                   " " " " " "CC C= = =; ; ;3 3 3J J J= = =; ; ;3 3 3N N N 3:j!!1})1)++ 	! 	! 	! 	!# # # #"( ( ( (N= N= N= N= N= N= N= N=b
 '
(r   