
    ytf,                     &   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    a/var/www/html/software/conda/envs/higlass/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                 t    t        j                  d| z        t        t        j                  d      | z        fS )Nchar[%d]charr   r   s    r   new_binary_datar'       s.    77:&'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_pointerr.   (   s!    77:s#SZZ	%:::r   c                 X    t        j                  d|       t        j                  d      fS r!   r)   r*   s    r   value_int_pointerr0   ,   s!    7763E!222r   c                 j    t        j                  d|dz   z  |       t        j                  d      |z  fS )Nr%   r   r&   r)   )r+   r   s     r   value_binary_datar2   0   s/    77:!,c2CJJv4F4OOOr   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_optr?   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   r7   
ValueErrorr   r"   r<   r	   buffer)r=   opt_pointerr   r>   s       r   value_from_opt_pointerrD   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 r6   )
r8   r   r"   r9   r:   r;   r.   r<   r2   r0   )r=   valuer   r>   s       r   initialize_opt_pointerrG   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)selfrN   socket_typeshadowrM   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	   rO   rP   rW   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)rV   getrK   TYPEr   errnoENOTSOCKETERM)rW   es     r   _check_closed_deepzSocket._check_closed_deep~   st     <<		HHSXX   	ww#,,&#CII%  	s   / 	B
$B!BB
c                 "    | j                         S N)rf   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   rP   T)	rV   hasattrrP   setrK   LINGERrR   	zmq_closer   )rW   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<   decoderR   zmq_bindrP   IPC_PATH_MAX_LEN	zmq_errno	errno_modENAMETOOLONGsplitr   ENOENTr   )rW   address	address_brp   pathru   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      unbindrs   )r   rv   rw   rx   rR   
zmq_unbindrP   r   rW   r   rp   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 )Nrs   )rv   rw   rx   rR   zmq_connectrP   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   
disconnectrs   )r   rv   rw   rx   rR   zmq_disconnectrP   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|z        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: %szvoid*)rv   rw   	TypeErrorr   r7   rA   r   r"   r<   lenrG   r   rR   zmq_setsockoptrP   r	   rO   )rW   r=   rF   r   r>   c_value_pointerc_sizets          r   rl   z
Socket.set   s    eS!<==	(!&)F ''HeU#8>>) 9F BCC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       rt   )r   r7   rA   r   r"   r?   r   rR   zmq_getsockoptrP   rD   rK   
ROUTING_IDr<   endswith)rW   r=   r>   r   c_sizet_pointerszvs          r   r`   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   rv   r<   
memoryviewtobytesrR   zmq_msg_init_sizer   r   memcpyzmq_msg_datar   zmq_msg_sendrP   zmq_msg_close)rW   bufflagszmq_msg	c_messagerp   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   rR   r   rP   trackerrq   )rW   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)trackrM   T)rv   rw   r   r   r   r   rA   rM   r   nbytesrK   _FINISHED_TRACKERr   rq   )	rW   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   rR   zmq_msg_initrK   r   r   r   zmq_msg_recvrP   	Exceptionr   rB   r   zmq_msg_sizer   )	rW   r   r   r   r   r   _buffer_bytesrp   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   Nrs   )r   rK   	EVENT_ALLr	   rU   rv   rw   rx   rR   zmq_socket_monitorrP   )rW   addreventss      r   r   zSocket.monitorT  s\    $ 	vy)A:]]F<88DdC ;;v&D	T--tV<r   )NNr   Nrh   )r   FF)r   TF)rt   )__name__
__module____qualname__rN   rX   rP   rV   _refrQ   rM   rZ   propertyr^   rf   ri   rq   r   r   r   r   rl   r`   r   r   r   r   r   r   r   r   rI   rI   `   s    GKKGDGN  9 9, ) )	.
<6	60=r   rI   r{   )r   )&__doc__rb   r}   rK   zmq.constantsr   r   	zmq.errorr   r   r   _cffir	   r
   rR   messager   utilsr   r   new_sizet_pointerr   r   r#   r'   r,   r.   r0   r2   r   r:   get_ipc_path_max_lenr{   r?   rD   rG   rI   __all__r   r   r   <module>r      s    
  
 0 9 9    "C C=;3J=;3P szz*%*)1))+ 	!#"(M= M=` '
(r   