§
    öÛgß  ã            
       ó’   — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddgZ G d„ de¦  «        Z	dej
        ddfdd	d
ddddedffd„ZdS )é    NÚfind_available_portÚSocketFactoryc                   ó   — e Zd ZdZej        Zej        Zej        Z	de
fd„Zeej        ej        ej        ej        ffde
fd„¦   «         Zededffd„¦   «         Zdej        dej        fd„Zdd	„Z	 d	 	 	 	 	 dd„Zd„ ZdS )r   zæ
	Object used to create a socket and connect it.

	This is, more or less, a specialized partial() for socket creation.

	Additionally, it provides methods and attributes for abstracting
	exception management on socket operation.
	Úreturnc                 ó   — |j         | j        u S ©N)Ú	__class__Útimeout_exception)ÚselfÚerrs     úN/granary/edev/quantum/lib/python3.11/site-packages/postgresql/python/socket.pyÚ	timed_outzSocketFactory.timed_out   s   € Ø	Œ˜$Ô0Ð	0Ð0ó    c                 ó4   — t          | dd¦  «        }|€dS ||v S )zz
		Does the error indicate that the operation should be tried again?

		More importantly, the connection is *not* dead.
		ÚerrnoNF)Úgetattr)r   Úcodesr   s      r   Ú	try_againzSocketFactory.try_again   s)   € õ �#�w Ñ
%Ô
%€%Ø
€]Ø
ˆ%Ø	�%ˆÐr   Nc                 óR   — |                       |¦  «        rdS t          |dd¦  «        S )z_
		If the exception was fatal to the connection,
		what message should be given to the user?
		NÚstrerrorz<strerror not present>)r   r   )Útypr   s     r   Úfatal_exception_messagez%SocketFactory.fatal_exception_message+   s0   € ð 	‡]‚]�3ÑÔð Ø
ˆ$Ý	��jÐ":Ñ	;Ô	;Ð;r   Úsocketc                 óf   — | j         �t          j        |fi | j         ¤ŽS t          j        |¦  «        S )zsecure a socket with SSL)Úsocket_secureÚsslÚwrap_socket)r   r   s     r   ÚsecurezSocketFactory.secure5   s6   € à	ÔÐ#Ý
Œ/˜&Ð
7Ð
7 DÔ$6Ð
7Ð
7Ð7å
Œ/˜&Ñ
!Ô
!Ð!r   c                 ó   — t          j         | j        Ž }	 |                     |�t          |¦  «        nd ¦  «         |                     | j        ¦  «         |                     d ¦  «         n## t          $ r |                     ¦   «          ‚ w xY w|S r   )r   Úsocket_createÚ
settimeoutÚfloatÚconnectÚsocket_connectÚ	ExceptionÚclose)r   ÚtimeoutÚss      r   Ú__call__zSocketFactory.__call__<   s“   € Ý„m�TÔ'Ð(€!ð	Ø‡<‚< 'Ð"5•�g‘”�¸4Ñ@Ô@Ð@Ø‡9‚9ˆTÔ Ñ!Ô!Ð!Ø‡<‚<�ÑÔÐÐøÝ	ð 	ð 	ð 	Ø‡7‚7�9„9€9Øð	øøøð 
€(s   •AA+ Á+ Br    ú.positional parameters given to socket.socket()r$   ú#parameter given to socket.connect()r   ú!keywords given to ssl.wrap_socketc                 ó0   — || _         || _        || _        d S r   )r    r$   r   )r   r    r$   r   s       r   Ú__init__zSocketFactory.__init__G   s"   € ð
 %€$ÔØ&€$ÔØ$€$ÔÐÐr   c                 ó0   — dt          | j        ¦  «        z   S )Nr   )Úreprr$   )r   s    r   Ú__str__zSocketFactory.__str__P   s   € Ø	•D˜Ô,Ñ-Ô-Ñ	-Ð-r   r   )r    r*   r$   r+   r   r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   r
   ÚerrorÚfatal_exceptionÚtry_again_exceptionÚboolr   Ústaticmethodr   ÚEAGAINÚEINTRÚEWOULDBLOCKÚ	ETIMEDOUTr   ÚclassmethodÚstrr   r   Ú	SSLSocketr   r)   r.   r1   © r   r   r   r      s;  € € € € € ðð ð ”^ÐØ”<€Ø”|Ðð1˜Tð 1ð 1ð 1ð 1ð Ø"œ\¨5¬;¸Ô8IÈ5Ì?Ð[ð 	ð 	Ð`dð 	ð 	ð 	ñ „,ð	ð ð<¨3°¨+ð <ð <ð <ñ „+ð<ð"˜6œ=ð "¨S¬]ð "ð "ð "ð "ð	ð 	ð 	ð 	ð 9=ð%ØBð%à8ð%ð 6ð%ð %ð %ð %ð.ð .ð .ð .ð .r   Ú	localhosti   )iÈ  iÝ  Ú	interfacezattempt to bind to interfaceÚaddress_familyz(address family to use (default: AF_INET)Úlimitz%Number tries to make before giving upr   c                 óü  — d}||k     rñ|dz  }t          j        t          j        ¦   «         |d         |d         z
  z  ¦  «        |d         z   }t          j        |t          j        ¦  «        }	 |                     d|f¦  «         |                     ¦   «          n_# t          j        $ rM}|                     ¦   «          |j        t          j	        t          j
        t          j        fv rY d}~ŒéY d}~nd}~ww xY wnd}|S )z³
	Find an available port on the given interface for the given address family.

	Returns a port number that was successfully bound to or `None` if the
	attempt limit was reached.
	r   é   rC   N)ÚmathÚfloorÚrandomr   ÚSOCK_STREAMÚbindr&   r6   r   ÚEACCESÚ
EADDRINUSEr<   )rD   rE   rF   Ú
port_rangeÚiÚportr(   Úes           r   r   r   S   s  € ð €Øˆ5‚y€yØ€q�&€!å„:Ý
„M�O„O�z !”} z°!¤}Ñ4Ñ5ñô à�!„}ñð õ
 „m�N¥FÔ$6Ñ8Ô8€!ðØ‡6‚6ˆ;˜Ð
ÑÔÐØ‡7‚7�9„9€9€9øÝ	Œð ð ð Ø‡7‚7�9„9€9Ø„g•%”,¥Ô 0µ%´+Ð>Ð>Ð>à€H€H€H€Hð ?Ð>Ð>Ð>Ð>øøøøðøøøð
 à	€$à€s   Á.+B ÂC6Â)>C1Ã1C6)ÚsysÚosrK   r   rI   r   r   Ú__all__Úobjectr   ÚAF_INETÚintr   rB   r   r   ú<module>rZ      sÞ   ðð €
€
€
Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø 
€
€
€
à  /Ð
2€ðC.ð C.ð C.ð C.ð C.�Fñ C.ô C.ð C.ðL /:Ø?E¼~Ø37Øð	!ð !Ø+ð!à<ð!ð 
1ð!ð
 
ˆ4€[ð!ð !ð !ð !ð !ð !r   