/ lib / trio / _socket.pyc
_socket.pyc
  1  o

  2  >��c�u�@s�ddlZddlZddlZddlZddlmZddlm	Z	ddl
  3  ZddlZddl
mZGdd�d�ZzddlmZWneyIejd	krGd
  4  ZYnwe�d�Ze�d�Zd
d�Zdd�ZejejBZd2dd�Zdd�Zdd�Zdd�Zeejddd�d3dd��Zejd	ks�e	s�e ed�r�eej!ddd�dd��Z!eej"ddd�dd ��Z"eejddd�ej#ej$ddfd!d"��Zd#d$�Z%e&ed%d�e&ed&d�BZ'd'd(�Z(d4d*d+�Z)d,d-�Z*Gd.d/�d/�Z+Gd0d1�d1e+�Z,dS)5�N)�wraps)�
TYPE_CHECKING�)�_corec@s.eZdZd
  5  dd�Zdd�Zdd�Zdd	�ZdS)�	_try_syncNcCs
  6  ||_dS�N)�_blocking_exc_override)�selfZblocking_exc_override�r
  7  ��C:\Users\Jacks.GUTTSPC\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\trio\_socket.py�__init__s
  8  z_try_sync.__init__cCs|jdur
  9  t|t�S|�|�Sr)r�
 10  isinstance�BlockingIOError)r	�excr
 11  r
 12  r�_is_blocking_io_errors
 13  
 14  
 15  z_try_sync._is_blocking_io_errorc�s�tj��IdHdSr)�trio�lowlevel�checkpoint_if_cancelled�r	r
 16  r
 17  r�
 18  __aenter__ s�z_try_sync.__aenter__c�s,�|dur|�|�rdStj��IdHdS)NTF)rrr�cancel_shielded_checkpoint)r	�etype�value�tbr
 19  r
 20  r�	__aexit__#s
 21  �z_try_sync.__aexit__r)�__name__�
 22  __module__�__qualname__rrrrr
 23  r
 24  r
 25  rrs
 26  
 27  r)�IPPROTO_IPV6�win32�)�hostname_resolver�socket_factorycC�t�d�}t�|�|S)a\Set a custom hostname resolver.
 28  
 29      By default, Trio's :func:`getaddrinfo` and :func:`getnameinfo` functions
 30      use the standard system resolver functions. This function allows you to
 31      customize that behavior. The main intended use case is for testing, but it
 32      might also be useful for using third-party resolvers like `c-ares
 33      <https://c-ares.haxx.se/>`__ (though be warned that these rarely make
 34      perfect drop-in replacements for the system resolver). See
 35      :class:`trio.abc.HostnameResolver` for more details.
 36  
 37      Setting a custom hostname resolver affects all future calls to
 38      :func:`getaddrinfo` and :func:`getnameinfo` within the enclosing call to
 39      :func:`trio.run`. All other hostname resolution in Trio is implemented in
 40      terms of these functions.
 41  
 42      Generally you should call this function just once, right at the beginning
 43      of your program.
 44  
 45      Args:
 46        hostname_resolver (trio.abc.HostnameResolver or None): The new custom
 47            hostname resolver, or None to restore the default behavior.
 48  
 49      Returns:
 50        The previous hostname resolver (which may be None).
 51  
 52      N)�	_resolver�get�set)r!�oldr
 53  r
 54  r�set_custom_hostname_resolverBs
 55  
 56  r(cCr#)a�Set a custom socket object factory.
 57  
 58      This function allows you to replace Trio's normal socket class with a
 59      custom class. This is very useful for testing, and probably a bad idea in
 60      any other circumstance. See :class:`trio.abc.HostnameResolver` for more
 61      details.
 62  
 63      Setting a custom socket factory affects all future calls to :func:`socket`
 64      within the enclosing call to :func:`trio.run`.
 65  
 66      Generally you should call this function just once, right at the beginning
 67      of your program.
 68  
 69      Args:
 70        socket_factory (trio.abc.SocketFactory or None): The new custom
 71            socket factory, or None to restore the default behavior.
 72  
 73      Returns:
 74        The previous socket factory (which may be None).
 75  
 76      N)�_socket_factoryr%r&)r"r'r
 77  r
 78  r�set_custom_socket_factorybs
 79  
 80  r*c
 81  �s��dd�}t|�4IdH�t�||||||tB�Wd�IdHS1IdHs*wYt|t�rLz|�d�}WntyKtj|dd�}Ynwt	�
 82  d�}|durb|�||||||�IdHStjj
tj||||||dd�IdHS)aTLook up a numeric address given a name.
 83  
 84      Arguments and return values are identical to :func:`socket.getaddrinfo`,
 85      except that this version is async.
 86  
 87      Also, :func:`trio.socket.getaddrinfo` correctly uses IDNA 2008 to process
 88      non-ASCII domain names. (:func:`socket.getaddrinfo` uses IDNA 2003, which
 89      can give the wrong result in some cases and cause you to connect to a
 90      different host than the one you intended; see `bpo-17305
 91      <https://bugs.python.org/issue17305>`__.)
 92  
 93      This function's behavior can be customized using
 94      :func:`set_custom_hostname_resolver`.
 95  
 96      cSst|tj�o|jtjkSr)r
�_stdlib_socket�gaierror�errno�
 97  EAI_NONAME)rr
 98  r
 99  r�numeric_only_failure�s
100  �z)getaddrinfo.<locals>.numeric_only_failureN�asciiT)�uts46��cancellable)rr+�getaddrinfo�
_NUMERIC_ONLYr
�str�encode�UnicodeEncodeError�_idnar$r%r�	to_thread�run_sync)�host�port�family�type�proto�flagsr/�hrr
101  r
102  rr4�s4��,�
103  �
104  �r4c�sB�t�d�}|dur|�||�IdHStjjtj||dd�IdHS)aLook up a name given a numeric address.
105  
106      Arguments and return values are identical to :func:`socket.getnameinfo`,
107      except that this version is async.
108  
109      This function's behavior can be customized using
110      :func:`set_custom_hostname_resolver`.
111  
112      NTr2)r$r%�getnameinforr:r;r+)�sockaddrrArBr
113  r
114  rrC�s�
115  
116  
117  �rCc�s�tjjtj|dd�IdHS)zkLook up a protocol number by name. (Rarely used.)
118  
119      Like :func:`socket.getprotobyname`, but async.
120  
121      Tr2N)rr:r;r+�getprotobyname)�namer
122  r
123  rrE�s��rEcCst|�S)z]Convert a standard library :class:`socket.socket` object into a Trio
124      socket object.
125  
126      )�_SocketType)�sockr
127  r
128  r�from_stdlib_socket�srIr
129  ��assigned�updatedcCs(t||||�\}}}tt�||||��S)z=Like :func:`socket.fromfd`, but returns a Trio socket object.)�_sniff_sockopts_for_filenorIr+�fromfd)�fdr>r?r@r
130  r
131  rrN�srN�	fromsharecOsttj|i|���Sr)rIr+rP)�args�kwargsr
132  r
133  rrP�scOs$tj|i|��\}}t|�t|�fS)zTLike :func:`socket.socketpair`, but returns a pair of Trio socket
134      objects.
135  
136      )r+�
137  socketpairrI)rQrR�left�rightr
138  r
139  rrSsrScCsV|durt�d�}|dur|�|||�Sn
140  t||||�\}}}t�||||�}t|�S)z�Create a new Trio socket, like :class:`socket.socket`.
141  
142      This function's behavior can be customized using
143      :func:`set_custom_socket_factory`.
144  
145      N)r)r%�socketrMr+rI)r>r?r@�fileno�sfZ
stdlib_socketr
146  r
147  rrVs
148  �rVc	Cs�tjdkr
149  |||fSddlm}m}m}m}tj||||d�}z|�||�}|�||�}|�||�}W|�	�n|�	�w|||fS)zCCorrect SOCKOPTS for given fileno, falling back to provided values.�linuxr)�	SO_DOMAIN�SO_PROTOCOL�
150  SOL_SOCKET�SO_TYPE)rW)
151  �sys�platformrVrZr[r\r]r+�
152  getsockopt�detach)	r>r?r@rWrZr[r\r]Zsockobjr
153  r
154  rrM"s
155  
156  
157  rM�
SOCK_NONBLOCK�SOCK_CLOEXECcCs|t@Sr)�_SOCK_TYPE_MASK)�type_numr
158  r
159  r�real_socket_typeJsrfFcsTttj|��t�ddd���fdd��}d|�d�|_|r(|jd|�d	�7_|S)
160  N)rr
161  rJc�s�|��||��IdHSr)�_nonblocking_helper)r	rQrR��fn�wait_fnr
162  r�wrapperQs�z1_make_simple_sock_method_wrapper.<locals>.wrapperzLike :meth:`socket.socket.z`, but async.
163  
164              z7Only available on platforms where :meth:`socket.socket.z` is available.)�getattrr+rV�_wraps�__doc__)Zmethnamerj�maybe_availrkr
165  rhr� _make_simple_sock_method_wrapperNs
166  �rpc	�s��|tjkrt|t�rt|�dkstd��n+|tjkr5t|t�r0dt|�kr/dks4td��td��n|tjkr?t�	|�S|S|^}}}t|t
167  �rbzt�||d�W|Stt
fyaYnw|dkrhd}|dkrnd}d}	|rw|	tjO}	|tjkr�|s�|	tjO}	t||||||	�IdH}
168  t|
169  �d	ks�J�|
170  ^�^}}}|tjkr�t|�}t|�dks�J�t|�d
171  kr�|d|d<t|�dkr�|d
172  |d
173  <t|�}|S)N�z&address should be a (host, port) tuple�z=address should be a (host, port, [flowinfo, [scopeid]]) tupler�z<broadcast>z255.255.255.255r�)r+�AF_INETr
�tuple�len�
174  ValueError�AF_INET6�AF_UNIX�os�fspath�int�	inet_pton�OSError�	TypeError�
175  AI_PASSIVE�AI_V4MAPPEDr4�list)r?r>r@�ipv6_v6only�address�localr<r=�_rAZgai_resZnormedr
176  r
177  r�_resolve_address_nocpms^�
178  �
179   ����
180  
181  
182  
183  ��
184  
185  
186  r�c@seZdZdd�ZdS)�
187  SocketTypecCstd��)Nz`SocketType is an abstract class; use trio.socket.socket if you want to construct a socket object)r�rr
188  r
189  rr�s�zSocketType.__init__N)rrrrr
190  r
191  r
192  rr��sr�cs�eZdZdd�Zhd�Zdd�Z�fdd�Zdd	�Zd
193  d�Ze	dd
��Z
194  e	dd��Ze	dd��Ze	dd��Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zed&ej�Zd'd(�Zd)d*�Zed+ej�Zed,ej�Zed-ej�Zed.ej�Z e!e"j#d/�r�ed/ejd0d1�Z$e!e"j#d2�r�ed2ejd0d1�Z%ed3ej�Z&e'e"j#j(d4d4d5�d6d7��Z(e)j*d8ks�e+s�e!e"j#d9�r�e'e"j#j,d4d4d5�d:d;��Z,�Z-S�Z-S�Z-S)<rGcCs>t|�tjurtd�t|�j���||_|j�d�d|_dS)Nz0expected object of type 'socket.socket', not '{}F)	r?r+rVr��formatr�_sock�setblocking�_did_shutdown_SHUT_WR)r	rHr
195  r
196  rr�s��
197  z_SocketType.__init__>
198  �listen�getpeernamer`�
199  setsockopt�get_inheritable�sharera�getsockname�set_inheritablerWcCs||jvrt|j|�St|��r)�_forwardrlr��AttributeError)r	rFr
200  r
201  r�__getattr__�s
202  z_SocketType.__getattr__cst���t|j�Sr)�super�__dir__r�r�r��	__class__r
203  rr��sz_SocketType.__dir__cCs|Srr
204  rr
205  r
206  r�	__enter__�sz_SocketType.__enter__cGs|jj|�Sr)r��__exit__)r	�exc_infor
207  r
208  rr��sz_SocketType.__exit__cC�|jjSr)r�r>rr
209  r
210  rr>��z_SocketType.familycCst|jj�Sr)rfr�r?rr
211  r
212  rr?�sz_SocketType.typecCr�r)r�r@rr
213  r
214  rr@�r�z_SocketType.protocCs|jSr)r�rr
215  r
216  r�did_shutdown_SHUT_WR�sz _SocketType.did_shutdown_SHUT_WRcCst|j��dd�S)Nz
socket.socketztrio.socket.socket)�reprr��replacerr
217  r
218  r�__repr__�sz_SocketType.__repr__cCst|j���S)z"Same as :meth:`socket.socket.dup`.)rGr��duprr
219  r
220  rr�sz_SocketType.dupcCs.|j��dkrtj�|j�|j��dSdS)N�����)r�rWrr�notify_closing�closerr
221  r
222  rr�s�z_SocketType.closec�sh�|j|dd�IdH}ttd�r&|jtjkr&|dr&tj�|jj	|�IdHStj
223  ��IdH|j�	|�S)NT�r�rzr)r��hasattrr+r>rzrr:r;r��bindr�
224  checkpoint)r	r�r
225  r
226  rr�s���z_SocketType.bindcCs*|j�|�|tjtjfvrd|_dSdS)NT)r��shutdownr+�SHUT_WR�	SHUT_RDWRr�)r	�flagr
227  r
228  rr�s
229  �z_SocketType.shutdowncCsRtjdkrt�|jgggd�\}}}t|�St��}|�|jtj�t|�d��S)Nrr)r^r_�selectr��bool�poll�register�POLLIN)r	�rreadyr��pr
230  r
231  r�is_readable$s
232  z_SocketType.is_readablec�s�t�|j�IdHdSr)r�
wait_writabler�rr
233  r
234  rr�-s�z_SocketType.wait_writablec�sD�|jtjkr|j�ttj�}nd}t|j|j|j	|||d�IdHS)NF)r�r�r�)
235  r>r+ryr�r`r�IPV6_V6ONLYr�r?r@)r	r�r�r�r
236  r
237  rr�0s���z!_SocketType._resolve_address_nocpc	�s��t�4IdH�||jg|�Ri|��Wd�IdHS1IdHs%wY	||j�IdHz
||jg|�Ri|��WStyIYnwq+r)rr�r)r	rirQrRrjr
238  r
239  rrg@s�,���z_SocketType._nonblocking_helper�acceptc�s �|��IdH\}}t|�|fS)z-Like :meth:`socket.socket.accept`, but async.N)�_acceptrI)r	rH�addrr
240  r
241  rr�fs�z_SocketType.acceptc	�s��z9|j|dd�IdH}t�4IdH�|j�|�Wd�IdHWS1IdHs+wYt�|j�IdHWntjyH|j���w|j�	t
242  jt
243  j�}|dkr`t
|dt�|���dS)NFr�rzError in connect: )r�rr��connectrr�r�	Cancelledr�r`r+r\�SO_ERRORrr{�strerror)r	r��errr
244  r
245  rr�os�
246  0.�3
247  ��z_SocketType.connect�recv�	recv_into�recvfrom�
recvfrom_into�recvmsgT)ro�recvmsg_into�sendr
248  rJc�sB�t|�}|j|ddd�IdH|d<|�tjj|itj�IdHS)z3Similar to :meth:`socket.socket.sendto`, but async.r�Fr�N)r�r�rgr+rV�sendtorr��r	rQr
249  r
250  rr��s�
251  �z_SocketType.sendtor�sendmsgc�sZ�t|�dkr|ddurt|�}|j|ddd�IdH|d<|�tjj|itj�IdHS)z�Similar to :meth:`socket.socket.sendmsg`, but async.
252  
253              Only available on platforms where :meth:`socket.socket.sendmsg` is
254              available.
255  
256              rrr�NFr�)	rwr�r�rgr+rVr�rr�r�r
257  r
258  rr��s�
259  
260  �z_SocketType.sendmsg).rrrrr�r�r�r�r��propertyr>r?r@r�r�r�r�r�r�r�r�r�rgrpr�
wait_readabler�r�r�r�r�r�r�r�r+rVr�r�r�rmr�r^r_rr��
__classcell__r
261  r
262  r�rrG�sh

263  
264  
265  
266  	$	J���
267  
268  �
269  ��rG)rrrr)r)F)-r{r^r�rVr+�	functoolsrrm�typingr�idnar9rrsrrr�ImportErrorr_�RunVarr$r)r(r*�AI_NUMERICHOST�AI_NUMERICSERVr5r4rCrErIrNr�rPrSru�SOCK_STREAMrMrlrdrfrpr�r�rGr
270  r
271  r
272  r�<module>sj
273  ��
274  
275  
276   
277  ?
278  ��
279  
280  	�
281   
282  ��	
283  @