
    f,                     &   d 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      dk(  Z ej>                         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    R/var/www/cvtools/html/venv/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   0   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   9   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   E   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   V   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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Zy)SocketNFr   c                 B   |t         j                  }|| _        || _        |r#t	        j
                  d|      | _        d| _        n,d| _        t        j                  |j                  |      | _        | j                  t        j                  k(  r
t               d| _        y )Nzvoid *TF)zmqCOPY_THRESHOLDcopy_thresholdcontextr	   cast_zmq_socket_shadowC
zmq_socket_zmq_ctxNULLr   _closed)selfrP   socket_typeshadowrO   s        r   __init__zSocket.__init__i   s    ! //N,"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	   rQ   rR   rY   s    r   
underlyingzSocket.underlyingy   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)rX   getrM   TYPEr   errnoENOTSOCKETERM)rY   es     r   _check_closed_deepzSocket._check_closed_deep~   st     <<		HHSXX   	ww#,,&#CII%  	s   / 	B
$B!BB
c                 "    | j                         S N)rh   r_   s    r   closedzSocket.closed   s    &&((r   c                    d}| j                   s`t        | d      rT| j                  A| | j                  t        j
                  |       t        j                  | j                        }d| _         |dk  rt        |       y y )Nr   rR   T)	rX   hasattrrR   setrM   LINGERrT   	zmq_closer   )rY   lingerrcs      r   closezSocket.close   si    ||m <+%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>   decoderT   zmq_bindrR   IPC_PATH_MAX_LEN	zmq_errno	errno_modENAMETOOLONGsplitr   ENOENTr   )rY   address	address_brr   pathrw   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        dd       t        |t              r|j                  d      }t	        j
                  | j                  |      }t        |       y )N      unbindru   )r   rx   ry   rz   rT   
zmq_unbindrR   r   rY   r   rr   s      r   r   zSocket.unbind   sA    vx(gs#nnV,G\\$**G4"r   c                     t        |t              r|j                  d      }t        j                  | j
                  |      }t        |       y )Nru   )rx   ry   rz   rT   zmq_connectrR   r   r   s      r   connectzSocket.connect   s7    gs#nnV,G]]4++W5"r   c                     t        dd       t        |t              r|j                  d      }t	        j
                  | j                  |      }t        |       y )Nr   
disconnectru   )r   rx   ry   rz   rT   zmq_disconnectrR   r   r   s      r   r   zSocket.disconnect   sC    v|,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: zvoid*)rx   ry   	TypeErrorr   r9   rC   r   r"   r>   lenrI   r   rT   zmq_setsockoptrR   r	   rQ   )rY   r?   rH   r   r@   c_value_pointerc_sizets          r   rn   z
Socket.set   s    eS!<==	(!&)F ''HeU#8>>)"7x @AAZF#9&%#P HHWo.	
  	$  ||H		$s   B> >CCc                    	 t        |      }|j                  }t        |d      \  }}t        t        j                  | j                  |||       |d   }t        |||      }|t        j                   j                  k7  r)|t        j                  k(  r|j                  d      r|d d }|S # t        $ r t        j                  }Y w xY w)N   r   r       rv   )r   r9   rC   r   r"   rA   r   rT   zmq_getsockoptrR   rF   rM   
ROUTING_IDr>   endswith)rY   r?   r@   r   c_sizet_pointerszvs          r   rb   z
Socket.get   s    	(!&)F ''H+?s+S(d..	
 Q"6?B?c&&111HNN*

5!#2A-  	$  ||H		$s   B* *CC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   rx   r>   
memoryviewtobytesrT   zmq_msg_init_sizer   r   memcpyzmq_msg_datar   zmq_msg_sendrR   zmq_msg_close)rY   bufflagszmq_msg	c_messagerr   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   rT   r   rR   trackerrs   )rY   framer   
frame_copyr   r   s         r   _send_framezSocket._send_frame  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)trackrO   T)rx   ry   r   r   r   r   rC   rO   r   nbytesrM   _FINISHED_TRACKERr   rs   )	rY   datar   copyr   close_framer   r   r   s	            r   sendzSocket.send!  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   rT   zmq_msg_initrM   r   r   r   zmq_msg_recvrR   	Exceptionr   rD   r   zmq_msg_sizer   )	rY   r   r   r   r   r   _buffer_bytesrr   s	            r   recvzSocket.recv<  s    ggl+GNN7#IIE*EmmG	ANNGT5E5EuM L**Q^^G4annW6MN__W%"  	(	s   &C "D c                     t        dd       |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   monitorr   Nru   )r   rM   	EVENT_ALLr	   rW   rx   ry   rz   rT   zmq_socket_monitorrR   )rY   addreventss      r   r   zSocket.monitorT  s\    $ 	vy)A:]]F<88DdC ;;v&D	T--tV<r   )NNr   Nrj   )r   FF)r   TF)rv   )__name__
__module____qualname__rP   rZ   rR   rX   _refrS   rO   r\   propertyr`   rh   rk   rs   r   r   r   r   rn   rb   r   r   r   r   r   r   r   r   rK   rK   `   s    GKKGDGN  9 9, ) )	.
<6	60=r   rK   r}   )r   )&__doc__rd   r   rM   zmq.constantsr   r   	zmq.errorr   r   r   _cffir	   r
   rT   messager   utilsr   r   new_sizet_pointerr   r   r#   r)   r.   r0   r2   r4   r   r<   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 szz*%*)1))+ 	!#"(M= M=` '
(r   