
    Xh7                     2   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jB                         Z"ddZ#ddZ$ddZ% G d d      Z&ddgZ'y)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    K/var/www/html/myenv/lib/python3.12/site-packages/zmq/backend/cffi/socket.py<lambda>r      s    F)C     c                  h    t        j                  d      t        t        j                  d            fS Nz	uint64_t*uint64_tr	   r   nspsizeof r   r   new_uint64_pointerr      s$    77;SZZ
%;!<<<r   c                  h    t        j                  d      t        t        j                  d            fS Nzint64_t*int64_tr   r   r   r   new_int64_pointerr      s$    77:CJJy$9 :::r   c                  h    t        j                  d      t        t        j                  d            fS Nzint*intr   r   r   r   new_int_pointerr#      s#    776?C

5 1222r   c                 x    t        j                  d| dd      t        t        j                  d      | z        fS )Nchar[d]charr   r   s    r   new_binary_datar)   !   s4    77U6!*A&'SZZ-?&-H)IIIr   c                 X    t        j                  d|       t        j                  d      fS r   r	   r   r   vals    r   value_uint64_pointerr.   %   s!    77;$cjj&<<<r   c                 X    t        j                  d|       t        j                  d      fS r   r+   r,   s    r   value_int64_pointerr0   )   s!    77:s#SZZ	%:::r   c                 X    t        j                  d|       t        j                  d      fS r!   r+   r,   s    r   value_int_pointerr2   -   s!    7763E!222r   c                 n    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   s5    77U6A:a.*C0#**V2Dv2M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   ;   sX    v{HLL9H8>>!lx8;;7N ""	X^^	#v&&   r   c                     	 t        |       } | j                  }|t        j
                  k(  rt        j                  ||      d d  S t	        |d         S # t        $ r t        j                  }Y Uw xY w)Nr   )r   r9   
ValueErrorr   r"   r>   r	   buffer)r?   opt_pointerr   r@   s       r   value_from_opt_pointerrF   G   sk    $f% ##8>>!zz+v.q11;q>""    <<	 s   A A/.A/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   s\    v{HLL9H8>>!lx8;;7N"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y)SocketNFr   c                 ^   |t         j                  }|| _        || _        d x| _        | _        |r#t        j                  d|      | _        d| _	        n,d| _	        t        j                  |j                  |      | _        | j                  t        j                  k(  r
t               d| _        y )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"xx&9DDL DL ||G,<,<kJDsxx'*r   c                 T    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      388Hd&6&6788r   c                    | j                   ry	 | j                  t        j                         y# t        $ rR}|j
                  t        j                  k(  rd| _         Y d}~y|j
                  t        j                  k(  rn Y d}~yd}~ww xY w)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   st     <<		HHSXX   	ww#,,&#CII%  	s   / 	B
$B!BB
c                 "    | j                         S N)rk   rb   s    r   closedzSocket.closed   s    &&((r   c                 t   d}| j                   st        | d      r| j                  -t        j                  | j                        }d x| _        | _        | j                  A| | j                  t        j                  |       t        j                  | j                        }d| _         |dk  rt        |       y y )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>BB"T%;+%HHSZZ0[[!1!12DL6bM r   c                    t        |t              r|j                  d      }n|}t        |t              r|j	                  d      }t        j                  | j                  |      }|dk  rt        rft        j                         t        j                  k(  rA|j                  dd      d   }d| dt         d}t        t        j                         |	      t        j                         t        j                  k(  r:|j                  dd      d   }d
| d}t        t        j                         |	      t        |       y y )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   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                     t        |t              r|j                  d      }t        j                  | j
                  |      }t        |       y Nry   )r|   r}   r~   rW   
zmq_unbindrU   r   r\   r   rv   s      r   unbindzSocket.unbind   s7    gs#nnV,G\\$**G4"r   c                     t        |t              r|j                  d      }t        j                  | j
                  |      }t        |       y r   )r|   r}   r~   rW   zmq_connectrU   r   r   s      r   connectzSocket.connect   s7    gs#nnV,G]]4++W5"r   c                     t        |t              r|j                  d      }t        j                  | j
                  |      }t        |       y r   )r|   r}   r~   rW   zmq_disconnectrU   r   r   s      r   
disconnectzSocket.disconnect   s9    gs#nnV,Gd..8"r   c           	         d }t        |t              rt        d      	 t        |      }|j                  }t        |t              r,|t        j                  k7  rt        d|       t        |      }t        |||      \  }}t        t        j                  | j                  |t        j                   d|      |       y # t
        $ r t        j                  }Y w xY w)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 ''HeU#8>>)"7x @AAZF#9&%#P HHWo.	
  	$  ||H		$s   B> >CCc                 N   	 t        |      }|j                  }|t
        j                  k(  r\| j                  Pt        |      \  }}t        j                  | j                  t        j                  d|             t	        |d         S t        |d      \  }}	 t        t        j                  | j                  |||       |d   }tK        |||      }	|t
        j                   jL                  k7  r)|t        jN                  k(  r|	jQ                  d      r|	d d }	|	S # t        $ r t        j                  }Y w xY w# t         $ r}|t         j                  k(  r|j"                  t
        j$                  j&                  k(  r| j)                  t         j*                        r~t-        dd       t
        j.                  st1        d      t3        j4                  t
        j6                  j9                         d	       t        j:                  d
      | _        t        j>                         x| j<                  d<   | _        | j                  t        j@                  k(  rd x| _        | _         t        jB                  | j                  | j                  t        j@                  t
        jD                  t
        jF                  z        }tI        |       t        j                  | j                  t        j                  d|            }tI        |       t	        |d         cY d }~S  d }~ww xY w)Nr   r      r   )         z)draft socket FD support via zmq_poller_fdz'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   	DRAFT_API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   sz   	(!&)F ''HSVV 2 2 >!5f!=OQOOD../0RSq)**+?s+S()	    T Q"6?B?c&&111HNN*

5!#2AE  	$  ||H		$.  !	,//)GGsyy///HH\55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 'D: D76D7:
L$GLL$LL$c                    t        j                  d      }t        |t              st	        |      j                         }t        j                  d|      }t        j                  |t        |            }t        |       t        j                  t        j                  |      |t        |             t        t        j                  || j                  |       t        j                  |      }t        |       y)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GGHc*	  #c(3"	()SX>1A1A5Ioog&#r   c                     |j                         }|j                  }t        t        j                  || 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  sO     __&
$$1A1A5I$$r   c                     t        |t              rt        d      |r"t        |t              s| j	                  ||      S d}t        |t              r|r|j
                  st        d      |}nl| j                  rFt        |      }|j                  | j                  k  r"| j	                  ||       t        j                  S t        ||| j                        }d}| j                  ||      }|r|j                          |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 LMM
4/??4//K$&$%<==&&$T*CzzD$7$77U3"444d%@S@ST"&&ue4GNr   c                    |r+t        j                  d      }t        j                  |       n"t	        j
                  |      }|j                  }	 t        t        j                  || j                  |       |sS t        j                  t        j                  |      t        j                  |            }|d d  }t        j                  |      }t        |       |S # t        $ r |rt        j                  |        w xY w)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    ggl+GNN7#IIE*EmmG	ANNGT5E5EuM L**Q^^G4annW6MN__W%"  	(	s   &C "D )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||kD  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    &!EFF==@AAA:y(=>??[[
Q;Fj y(CJ<qQRR%!!**d.>.>vuU"	r   c                     |dk  rt         j                  }|t        j                  }t	        |t
              r|j                  d      }t        j                  | j                  ||       y)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  sR    " A:]]F<88D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, ) ).
<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 9 9    "C C=;3J=;3N 3::j!1})1))+ 	!#"(N= N=b
 '
(r   