
    ^h7                     8   S r SSKrSSKrSSKrSSKJrJr  SSKJ	r	J
r
Jr  SSKJr  SSKJr  SSKJr  SS	KJr  S
 =rrS rS rS rS rS rS rS rS r\R<                  " S5      r\S:H  r \RB                  " 5       r"SS jr#SS jr$SS jr% " S S5      r&SS/r'g)zzmq Socket class    N)SocketOption_OptType)ZMQError	_check_rc_check_version   )ffi)lib)Frame)_retry_sys_callc                 0    [         R                  " SU 5      $ )Nzsize_t*)r	   newlengths    Q/home/james-whalen/.local/lib/python3.13/site-packages/zmq/backend/cffi/socket.py<lambda>r      s    F)C    c                  l    [         R                  " S5      [        [         R                  " S5      5      4$ Nz	uint64_t*uint64_tr	   r   nspsizeof r   r   new_uint64_pointerr      s$    77;SZZ
%;!<<<r   c                  l    [         R                  " S5      [        [         R                  " S5      5      4$ Nzint64_t*int64_tr   r   r   r   new_int64_pointerr      s$    77:CJJy$9 :::r   c                  l    [         R                  " S5      [        [         R                  " S5      5      4$ Nzint*intr   r   r   r   new_int_pointerr#      s#    776?C

5 1222r   c                 |    [         R                  " SU S S35      [        [         R                  " S5      U -  5      4$ )Nchar[d]charr   r   s    r   new_binary_datar)   !   s4    77U6!*A&'SZZ-?&-H)IIIr   c                 \    [         R                  " SU 5      [         R                  " S5      4$ r   r	   r   r   vals    r   value_uint64_pointerr.   %   s!    77;$cjj&<<<r   c                 \    [         R                  " SU 5      [         R                  " S5      4$ r   r+   r,   s    r   value_int64_pointerr0   )   s!    77:s#SZZ	%:::r   c                 \    [         R                  " SU 5      [         R                  " S5      4$ r!   r+   r,   s    r   value_int_pointerr2   -   s!    7763E!222r   c                 r    [         R                  " SUS-   S S3U 5      [         R                  " S5      U-  4$ )Nr%   r   r&   r'   r(   r+   )r-   r   s     r   value_binary_datar4   1   s5    77U6A:a.*C0#**V2Dv2MMMr   ZMQ_FD_T   c                    [        U S[        R                  5      nU[        R                  :X  d  [        (       a  U[        R
                  :X  a
  [        5       $ U[        R                  :X  a  [        U5      $ [        5       $ N	_opt_type)
getattrr   r"   int64ZMQ_FD_64BITfdr   bytesr)   r#   )optionr   opt_types      r   new_pointer_from_optrA   ;   sZ    v{HLL9H8>>!llx8;;7N ""	X^^	#v&&   r   c                      [        U 5      n U R                  nU[        R
                  :X  a  [        R                  " X5      S S  $ [	        US   5      $ ! [         a    [        R                  n NWf = f)Nr   )r   r9   
ValueErrorr   r"   r>   r	   buffer)r?   opt_pointerr   r@   s       r   value_from_opt_pointerrF   G   si    $f% ##8>>!zz+.q11;q>""    <<	 s   A A10A1c                    [        U S[        R                  5      nU[        R                  :X  d  [        (       a  U[        R
                  :X  a  [        U5      $ U[        R                  :X  a  [        X5      $ [        U5      $ r8   )
r:   r   r"   r;   r<   r=   r0   r>   r4   r2   )r?   valuer   r@   s       r   initialize_opt_pointerrI   X   s\    v{HLL9H8>>!llx8;;7N"5))	X^^	# // ''r   c                       \ rS rSrSrSrSrSrSrSr	Sr
SrSrSS jr\S 5       rS r\S 5       rSS	 jrS
 rS rS rS rS rS rS rS rSS jrSS jrSSS.S\S\S\4S jjrSS jrSr g) Socketb   NFr   c                 l   Uc  [         R                  nX@l        Xl        S =U l        U l        U(       a$  [        R                  " SU5      U l        SU l	        O-SU l	        [        R                  " UR                  U5      U l        U R                  [        R                  :X  a
  [        5       eSU l        g )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)selfrR   socket_typeshadowrQ   s        r   __init__Socket.__init__m   s    ! //N,6::T3"xx&9DDL DL ||G,<,<kJDsxx'*r   c                 V    [        [        R                  " SU R                  5      5      $ )z+The address of the underlying libzmq socketsize_t)r"   r	   rU   rV   r]   s    r   
underlyingSocket.underlying~   s      388Hd&6&6788r   c                 (   U R                   (       a  g U R                  [        R                  5        g! [         aS  nUR
                  [        R                  :X  a  SU l          SnAgUR
                  [        R                  :X  a   SnAge SnAff = f)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\   getrO   TYPEr   errnoENOTSOCKETERM)r]   es     r   _check_closed_deepSocket._check_closed_deep   sq     <<		HHSXX   	ww#,,&#CII%  	s    4 
B%B(BBBc                 "    U R                  5       $ N)rn   rd   s    r   closedSocket.closed   s    &&((r   c                    SnU R                   (       d  [        U S5      (       a  U R                  b.  [        R                  " U R                  5      nS =U l        U l        U R                  bC  Ub   U R                  [        R                  U5        [        R                  " U R                  5      nSU l         US:  a  [        U5        g g )Nr   rV   T)r\   hasattrrT   rX   zmq_poller_destroyrS   rV   setrO   LINGER	zmq_closer   )r]   lingerrcs      r   closeSocket.close   s    ||m < <%%1))$*@*@A>BB"T%;+%HHSZZ0[[!1!12DL6bM r   c                    [        U[        5      (       a  UR                  S5      nOUn[        U[        5      (       a  UR	                  S5      n[
        R                  " U R                  U5      nUS:  a  [        (       af  [
        R                  " 5       [        R                  :X  a?  UR                  SS5      S   nSU S[         S3n[        [
        R                  " 5       US	9e[
        R                  " 5       [        R                  :X  a8  UR                  SS5      S   nS
U S3n[        [
        R                  " 5       US	9e[        U5        g g )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>   decoderX   zmq_bindrV   IPC_PATH_MAX_LEN	zmq_errno	errno_modENAMETOOLONGsplitr   ENOENTr   )r]   address	address_br{   pathr   s         r   bindSocket.bind   s   gs##v.IIgu%%&&v.GZZ(()46AKKMY5K5K$K}}UA.r2 &78H7I JA A  q{{}#66)"2"22}}UA.r2@bIq{{}#66" r   c                     [        U[        5      (       a  UR                  S5      n[        R                  " U R
                  U5      n[        U5        g Nr   )r   r   r   rX   
zmq_unbindrV   r   r]   r   r{   s      r   unbindSocket.unbind   s:    gs##nnV,G\\$**G4"r   c                     [        U[        5      (       a  UR                  S5      n[        R                  " U R
                  U5      n[        U5        g r   )r   r   r   rX   zmq_connectrV   r   r   s      r   connectSocket.connect   s:    gs##nnV,G]]4++W5"r   c                     [        U[        5      (       a  UR                  S5      n[        R                  " U R
                  U5      n[        U5        g r   )r   r   r   rX   zmq_disconnectrV   r   r   s      r   
disconnectSocket.disconnect   s<    gs##nnV,Gd..8"r   c           	         S n[        U[        5      (       a  [        S5      e [        U5      nUR                  n[        U[        5      (       a-  U[        R                  :w  a  [        SU 35      e[        U5      n[        XU5      u  pV[        [        R                  U R                  U[        R                   " SU5      U5        g ! [
         a    [        R                  n Nf = f)Nzunicode not allowed, use bytesznot a bytes sockopt: void*)r   r   	TypeErrorr   r9   rC   r   r"   r>   lenrI   r   rX   zmq_setsockoptrV   r	   rU   )r]   r?   rH   r   r@   c_value_pointerc_sizets          r   rw   
Socket.set   s    eS!!<==	(!&)F ''HeU##8>>)"7x @AAZF#9&#P HHWo.	
  	$  ||H		$s   C C%$C%c                 |    [        U5      nUR                  nU[
        R                  :X  a^  U R                  bQ  [        U5      u  p4[        R                  " U R                  [        R                  " SU5      5        [	        US   5      $ [        USS9u  p5 [        [        R                  U R                  UUU5        US   n[K        XU5      n	U[
        R                   RL                  :w  a/  U[        RN                  :X  a  U	RQ                  S5      (       a  U	S S n	U	$ ! [         a    [        R                  n GN#f = f! [          Ga  nU[         R                  :X  Ga  UR"                  [
        R$                  R&                  :X  Ga  U R)                  [         R*                  5      (       Ga  [-        SS5        [
        R.                  (       d  [1        S5      e[2        R4                  " [
        R6                  R9                  5       SS	9  [        R:                  " S
5      U l        [        R>                  " 5       =U R<                  S'   U l        U R                  [        R@                  :X  a  S =U l        U l        e [        RB                  " U R                  U R                  [        R@                  [
        RD                  [
        RF                  -  5      n[I        U5        [        R                  " U R                  [        R                  " SU5      5      n[I        U5        [	        US   5      s S nA$ e S nAff = f)Nr   r      r   )         z)draft socket FD support via zmq_poller_fdz'libzmq must be built with draft supportr   )
stacklevelzvoid*[1]rN       r   ))r   r9   rC   r   r"   rO   FDrS   rA   rX   zmq_poller_fdr	   rU   r   zmq_getsockoptrV   r   rj   ErrnoEINVALrh   THREAD_SAFEr   	DRAFT_APIRuntimeErrorwarningswarnerrorDraftFDWarningr   rT   zmq_poller_newr[   zmq_poller_addPOLLINPOLLOUTr   rF   
ROUTING_IDr>   endswith)
r]   r?   r@   r   _c_sizet_pointerrm   r{   szvs
             r   rh   
Socket.get   sz   	(!&)F ''HSVV 2 2 >!5f!=OOOD../0RSq)**+?s+S()	    T Q"6B?c&&111HNN*

5!!#2AE  	$  ||H		$.  !	,//)GGsyy///HH\5566y*UV}}&'PQQcii668QG *-)<&ABAQAQASS&&q)D,>%%1BFFD*T-?%%&&$$HHJJ,	 "__&&?(K "?1-..C!	s6   D 'E  D=<D= L;G$L6/L;5L66L;c                    [         R                  " S5      n[        U[        5      (       d  [	        U5      R                  5       n[         R                  " SU5      n[        R                  " U[        U5      5      n[        U5        [        R                  " [        R                  " U5      U[        U5      5        [        [        R                  X0R                  U5        [        R                  " U5      n[        U5        g)zSend a copy of a bufferable
zmq_msg_t*zchar[]N)r	   r   r   r>   
memoryviewtobytesrX   zmq_msg_init_sizer   r   memcpyzmq_msg_datar   zmq_msg_sendrV   zmq_msg_close)r]   bufflagszmq_msg	c_messager{   rc2s          r   
_send_copySocket._send_copy:  s    '','#u%%S/))+CGGHc*	  #c(3"	()SX>1A1A5Ioog&#r   c                     UR                  5       nUR                  n[        [        R                  X@R
                  U5        UR                  nUR                  5         U$ )z1Send a Frame on this socket in a non-copy manner.)	fast_copyr   r   rX   r   rV   trackerr|   )r]   framer   
frame_copyr   r   s         r   _send_frameSocket._send_frameI  sM     __&
$$1A1A5I$$r   c                 D   [        U[        5      (       a  [        S5      eU(       a&  [        U[        5      (       d  U R	                  X5      $ Sn[        U[        5      (       a&  U(       a  UR
                  (       d  [        S5      eUnOmU R                  (       aF  [        U5      nUR                  U R                  :  a!  U R	                  Xr5        [        R                  $ [        XU R                  S9nSnU R                  Xb5      nU(       a  UR                  5         U$ )Nz.Message must be in bytes, not a unicode objectFzNot a tracked message)trackrQ   T)r   r   r   r   r   r   rC   rQ   r   nbytesrO   _FINISHED_TRACKERr   r|   )	r]   datar   copyr   close_framer   r   r   s	            r   sendSocket.sendT  s    dC  LMM
4//??4//K$&&$%<==&&$T*CzzD$7$773"444d@S@ST"&&u4GNr   c                 .   U(       a-  [         R                  " S5      n[        R                  " U5        O [        R
                  " US9nUR                  n [        [        R                  X@R                  U5        U(       d  W$ [         R                  " [        R                  " U5      [        R                  " U5      5      nUS S  n[        R                  " U5      n[        U5        U$ ! [         a    U(       a  [        R                  " U5        e f = f)Nr   )r   )r	   r   rX   zmq_msg_initrO   r   r   r   zmq_msg_recvrV   	Exceptionr   rD   r   zmq_msg_sizer   )	r]   r   r   r   r   r   _buffer_bytesr{   s	            r   recvSocket.recvo  s    ggl+GNN7#IIE*EmmG	ANNG5E5EuM L**Q^^G4annW6MN__W%"  	(	s   %C+ +)D)r   r   r   r   returnc                  [        U5      nUR                  (       d  [        S5      eUR                  (       a  [        S5      eUS:  a  [	        SU< S35      eUR
                  nUS:X  a  UnOX%:  a  [	        SU< SU S35      e[        R                  " U5      n[        [        R                  U R                  XbU5      n[        U5        U$ )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   rX   zmq_recvrV   r   )r]   rD   r   r   view
view_bytesc_bufr{   s           r   	recv_intoSocket.recv_into  s    &!EFF==@AAA:y(=>??[[
Q;F y(CJ<qQRR%!!**d.>.>uU"	r   c                     US:  a  [         R                  nUc  [        R                  n[	        U[
        5      (       a  UR                  S5      n[        R                  " U R                  X5        g)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   Nr   )
rO   	EVENT_ALLr	   r[   r   r   r   rX   zmq_socket_monitorrV   )r]   addreventss      r   monitorSocket.monitor  sS    " A:]]F<88DdC  ;;v&D	T--t<r   )r\   rS   rT   rW   rV   rR   rQ   )NNr   Nrq   )r   FF)r   TF)r   )!__name__
__module____qualname____firstlineno__rR   r^   rV   r\   _refrW   rS   rT   rQ   r`   propertyre   rn   rr   r|   r   r   r   r   rw   rh   r   r   r   r   r"   r   r  __static_attributes__r   r   r   rK   rK   b   s    GKKGDGMN" 9 9, ) ).
<EN	60 56A c c # $=r   rK   r   )r   )(__doc__rj   r   r   rO   zmq.constantsr   r   	zmq.errorr   r   r   _cffir	   r
   rX   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 9 9    "C C=;3J=;3N ::j!1}))+ 	!#"(N= N=b
 '
(r   