1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
U
Z±dŽuã@sÔddlZddlZddlZddlZddlmZddlm    Z    ddl
Z ddl Z ddl mZGdd„dƒZzddlmZWn"ek
r”ejd    krd
ZYnXe d ¡Ze d ¡Zd d„Zdd„ZejejBZd2dd„Zdd„Zdd„Zdd„Zeejdddd3dd„ƒZejd    ks e    s8e edƒr8eej!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
dd„Zdd„Zdd„Zdd    „ZdS) Ú    _try_syncNcCs
||_dS©N)Ú_blocking_exc_override)ÚselfZblocking_exc_override©r
úCd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/_socket.pyÚ__init__sz_try_sync.__init__cCs"|jdkrt|tƒS| |¡SdSr)rÚ
isinstanceÚBlockingIOError)r    Úexcr
r
r Ú_is_blocking_io_errors
 
z_try_sync._is_blocking_io_errorcÃstj ¡IdHdSr)ÚtrioÚlowlevelZcheckpoint_if_cancelled©r    r
r
r Ú
__aenter__ sz_try_sync.__aenter__cÃs.|dk    r| |¡rdStj ¡IdHdSdS)NTF)rrrZcancel_shielded_checkpoint)r    ÚetypeÚvalueÚtbr
r
r Ú    __aexit__#sz_try_sync.__aexit__)N)Ú__name__Ú
__module__Ú __qualname__r rrrr
r
r
r rs
r)Ú IPPROTO_IPV6Úwin32é)Úhostname_resolverÚsocket_factorycCst d¡}t |¡|S)a\Set a custom hostname resolver.
 
    By default, Trio's :func:`getaddrinfo` and :func:`getnameinfo` functions
    use the standard system resolver functions. This function allows you to
    customize that behavior. The main intended use case is for testing, but it
    might also be useful for using third-party resolvers like `c-ares
    <https://c-ares.haxx.se/>`__ (though be warned that these rarely make
    perfect drop-in replacements for the system resolver). See
    :class:`trio.abc.HostnameResolver` for more details.
 
    Setting a custom hostname resolver affects all future calls to
    :func:`getaddrinfo` and :func:`getnameinfo` within the enclosing call to
    :func:`trio.run`. All other hostname resolution in Trio is implemented in
    terms of these functions.
 
    Generally you should call this function just once, right at the beginning
    of your program.
 
    Args:
      hostname_resolver (trio.abc.HostnameResolver or None): The new custom
          hostname resolver, or None to restore the default behavior.
 
    Returns:
      The previous hostname resolver (which may be None).
 
    N)Ú    _resolverÚgetÚset)rÚoldr
r
r Úset_custom_hostname_resolverBs
 
r%cCst d¡}t |¡|S)aÛSet a custom socket object factory.
 
    This function allows you to replace Trio's normal socket class with a
    custom class. This is very useful for testing, and probably a bad idea in
    any other circumstance. See :class:`trio.abc.HostnameResolver` for more
    details.
 
    Setting a custom socket factory affects all future calls to :func:`socket`
    within the enclosing call to :func:`trio.run`.
 
    Generally you should call this function just once, right at the beginning
    of your program.
 
    Args:
      socket_factory (trio.abc.SocketFactory or None): The new custom
          socket factory, or None to restore the default behavior.
 
    Returns:
      The previous socket factory (which may be None).
 
    N)Ú_socket_factoryr"r#)r r$r
r
r Úset_custom_socket_factorybs
 
r'c Ãsàdd„}t|ƒ4IdHš,t ||||||tB¡W5QIdHR£SQIdHRXt|tƒrŒz| d¡}Wn"tk
rŠtj|dd}YnXt     
d¡}|dk    r¸| ||||||¡IdHSt j j tj||||||ddIdHSdS)aTLook up a numeric address given a name.
 
    Arguments and return values are identical to :func:`socket.getaddrinfo`,
    except that this version is async.
 
    Also, :func:`trio.socket.getaddrinfo` correctly uses IDNA 2008 to process
    non-ASCII domain names. (:func:`socket.getaddrinfo` uses IDNA 2003, which
    can give the wrong result in some cases and cause you to connect to a
    different host than the one you intended; see `bpo-17305
    <https://bugs.python.org/issue17305>`__.)
 
    This function's behavior can be customized using
    :func:`set_custom_hostname_resolver`.
 
    cSst|tjƒo|jtjkSr)r Ú_stdlib_socketÚgaierrorÚerrnoÚ
EAI_NONAME)rr
r
r Únumeric_only_failure™s 
þz)getaddrinfo.<locals>.numeric_only_failureNÚasciiT)Úuts46©Z cancellable)rr(Ú getaddrinfoÚ _NUMERIC_ONLYr ÚstrÚencodeÚUnicodeEncodeErrorÚ_idnar!r"rÚ    to_threadÚrun_sync)ÚhostÚportÚfamilyÚtypeÚprotoÚflagsr,Úhrr
r
r r0„s8ÿ"
 
ør0cÃsDt d¡}|dk    r$| ||¡IdHStjjtj||ddIdHSdS)aLook up a name given a numeric address.
 
    Arguments and return values are identical to :func:`socket.getnameinfo`,
    except that this version is async.
 
    This function's behavior can be customized using
    :func:`set_custom_hostname_resolver`.
 
    NTr/)r!r"Ú getnameinforr6r7r()Zsockaddrr=r>r
r
r r?Ãs
 
ÿr?cÃstjjtj|ddIdHS)zkLook up a protocol number by name. (Rarely used.)
 
    Like :func:`socket.getprotobyname`, but async.
 
    Tr/N)rr6r7r(Úgetprotobyname)Únamer
r
r r@Ös
ÿr@cCst|ƒS)z]Convert a standard library :class:`socket.socket` object into a Trio
    socket object.
 
    )Ú _SocketType)Úsockr
r
r Úfrom_stdlib_socketésrDr
©ÚassignedÚupdatedcCs(t||||ƒ\}}}tt ||||¡ƒS)z=Like :func:`socket.fromfd`, but returns a Trio socket object.)Ú_sniff_sockopts_for_filenorDr(Úfromfd)Úfdr:r;r<r
r
r rIñsrIÚ    fromsharecOsttj||ŽƒSr)rDr(rK)ÚargsÚkwargsr
r
r rKüscOs tj||Ž\}}t|ƒt|ƒfS)zTLike :func:`socket.socketpair`, but returns a pair of Trio socket
    objects.
 
    )r(Ú
socketpairrD)rLrMÚleftÚrightr
r
r rNsrNcCsV|dkr*t d¡}|dk    r>| |||¡Snt||||ƒ\}}}t ||||¡}t|ƒS)z™Create a new Trio socket, like :class:`socket.socket`.
 
    This function's behavior can be customized using
    :func:`set_custom_socket_factory`.
 
    N)r&r"ÚsocketrHr(rD)r:r;r<ÚfilenoZsfZ stdlib_socketr
r
r rQ s 
rQc    Cs|tjdkr|||fSddlm}m}m}m}tj||||d}z(|     ||¡}|     ||¡}|     ||¡}W5| ¡X|||fS)zCCorrect SOCKOPTS for given fileno, falling back to provided values.Úlinuxr)Ú    SO_DOMAINÚ SO_PROTOCOLÚ
SOL_SOCKETÚSO_TYPE)rR)
ÚsysÚplatformrQrTrUrVrWr(ÚdetachÚ
getsockopt)    r:r;r<rRrTrUrVrWZsockobjr
r
r rH"s
 
 
rHZ SOCK_NONBLOCKZ SOCK_CLOEXECcCs|t@Sr)Ú_SOCK_TYPE_MASK)Ztype_numr
r
r Úreal_socket_typeJsr]FcsTttj|ƒ‰tˆddd‡‡fdd„ƒ}d|›d|_|rP|jd|›d    7_|S)
N)rr
rEcŸs| ˆ||ˆ¡IdHSr)Ú_nonblocking_helper)r    rLrM©ÚfnÚwait_fnr
r ÚwrapperQsz1_make_simple_sock_method_wrapper.<locals>.wrapperzLike :meth:`socket.socket.z`, but async.
 
            z7Only available on platforms where :meth:`socket.socket.z` is available.)Úgetattrr(rQÚ_wrapsÚ__doc__)ZmethnameraÚ maybe_availrbr
r_r Ú _make_simple_sock_method_wrapperNs  
ÿrgc     Ãs¤|tjkr*t|tƒr t|ƒdksztdƒ‚nP|tjkrbt|tƒrXdt|ƒkrVdkszntdƒ‚n|tjkrvt     |¡S|S|^}}}t|t
ƒrÀzt  ||d¡Wnt t fk
rºYnX|S|dkrÌd}|dkrØd}d}    |rê|    tjO}    |tjkr|s|    tjO}    t||||||    ƒIdH}
t|
ƒd    ks0t‚|
^^}} }|tjkr t| ƒ} t| ƒdksdt‚t|ƒd
kr~|d| d<t|ƒdkr˜|d
| d
<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Ú
ValueErrorÚAF_INET6ÚAF_UNIXÚosÚfspathÚintÚ    inet_ptonÚOSErrorÚ    TypeErrorÚ
AI_PASSIVEÚ AI_V4MAPPEDr0ÚAssertionErrorÚlist) r;r:r<Ú ipv6_v6onlyÚaddressÚlocalr8r9Ú_r=Zgai_resÚnormedr
r
r Ú_resolve_address_nocpmsN
 
 
$ÿ
 
 
 
 
 
   rc@seZdZdd„ZdS)Ú
SocketTypecCs tdƒ‚dS)Nz`SocketType is an abstract class; use trio.socket.socket if you want to construct a socket object)rwrr
r
r r ®sÿzSocketType.__init__N)rrrr r
r
r
r r‚­sr‚c
s´eZdZdd„Zddddddd    d
d d h
Zd d„Z‡fdd„Zdd„Zdd„Ze    dd„ƒZ
e    dd„ƒZ e    dd„ƒZ e    dd„ƒZ dd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zed/ejƒZd0d1„Zd2d3„Zed4ejƒZed5ejƒZed6ejƒZed7ejƒZ e!e"j#d8ƒr.ed8ejd9d:Z$e!e"j#d;ƒrLed;ejd9d:Z%ed<ejƒZ&e'e"j#j(d=d=d>d?d@„ƒZ(e)j*dAks’e+s¬e!e"j#dBƒr¬e'e"j#j,d=d=d>dCdD„ƒZ,‡Z-S)ErBcCs>t|ƒtjk    r"td t|ƒj¡ƒ‚||_|j d¡d|_dS)Nz0expected object of type 'socket.socket', not '{}F)    r;r(rQrwÚformatrÚ_sockÚ setblockingÚ_did_shutdown_SHUT_WR)r    rCr
r
r r ¶sÿÿ z_SocketType.__init__rZÚget_inheritableÚset_inheritablerRÚ getpeernameÚ getsocknamer[Ú
setsockoptÚlistenÚsharecCs"||jkrt|j|ƒSt|ƒ‚dSr)Ú_forwardrcr„ÚAttributeError)r    rAr
r
r Ú __getattr__Þs
 z_SocketType.__getattr__cstƒ ¡t|jƒSr)ÚsuperÚ__dir__r{rŽr©Ú    __class__r
r r’ãsz_SocketType.__dir__cCs|Srr
rr
r
r Ú    __enter__æsz_SocketType.__enter__cGs |jj|ŽSr)r„Ú__exit__)r    Úexc_infor
r
r r–ész_SocketType.__exit__cCs|jjSr)r„r:rr
r
r r:ìsz_SocketType.familycCs t|jjƒSr)r]r„r;rr
r
r r;ðsz_SocketType.typecCs|jjSr)r„r<rr
r
r r<÷sz_SocketType.protocCs|jSr)r†rr
r
r Údid_shutdown_SHUT_WRûsz _SocketType.did_shutdown_SHUT_WRcCst|jƒ dd¡S)Nz socket.socketztrio.socket.socket)Úreprr„Úreplacerr
r
r Ú__repr__ÿsz_SocketType.__repr__cCst|j ¡ƒS)z"Same as :meth:`socket.socket.dup`.)rBr„Úduprr
r
r rœsz_SocketType.dupcCs*|j ¡dkr&tj |j¡|j ¡dS)Néÿÿÿÿ)r„rRrrZnotify_closingÚcloserr
r
r ržsz_SocketType.closecÃsj|j|ddIdH}ttdƒrJ|jtjkrJ|drJtj |jj    |¡IdHStj
  ¡IdH|j     |¡SdS)NT©r~rqr) rÚhasattrr(r:rqrr6r7r„ÚbindrÚ
checkpoint)r    r}r
r
r r¡ sÿ
þýz_SocketType.bindcCs&|j |¡|tjtjfkr"d|_dS)NT)r„Úshutdownr(ÚSHUT_WRÚ    SHUT_RDWRr†)r    Úflagr
r
r r£s z_SocketType.shutdowncCsRtjdkr,t |jgggd¡\}}}t|ƒSt ¡}| |jtj¡t| d¡ƒS)Nrr)rXrYÚselectr„ÚboolÚpollÚregisterÚPOLLIN)r    ÚrreadyrÚpr
r
r Ú is_readable$s 
z_SocketType.is_readablecÃst |j¡IdHdSr)rÚ wait_writabler„rr
r
r r¯-sz_SocketType.wait_writablecÃsB|jtjkr|j ttj¡}nd}t|j|j|j    |||dIdHS)NF)r|r}r~)
r:r(rpr„r[rÚ IPV6_V6ONLYrr;r<)r    r}r~r|r
r
r r0s ÿúz!_SocketType._resolve_address_nocpc Ãs€tƒ4IdHš&||jf|ž|ŽW5QIdHR£SQIdHRX||jƒIdHz||jf|ž|ŽWStk
rxYq@Xq@dSr)rr„r)r    r`rLrMrar
r
r r^@s0z_SocketType._nonblocking_helperÚacceptcÃs| ¡IdH\}}t|ƒ|fS)z-Like :meth:`socket.socket.accept`, but async.N)Ú_acceptrD)r    rCÚaddrr
r
r r±fsz_SocketType.acceptc Ãs¼zf|j|ddIdH}tƒ4IdHš"|j |¡W5QIdHR£WSQIdHRXt |j¡IdHWn"tjk
rˆ|j ¡‚YnX|j     t
j t
j ¡}|dkr¸t |dt |¡ƒ‚dS)NFrŸrzError in connect: )rrr„Úconnectrr¯rZ    Cancelledržr[r(rVÚSO_ERRORrvrrÚstrerror)r    r}Úerrr
r
r r´os0,
z_SocketType.connectÚrecvÚ    recv_intoÚrecvfromÚ recvfrom_intoÚrecvmsgT)rfÚ recvmsg_intoÚsendr
rEcÇs@t|ƒ}|j|dddIdH|d<| tjj|itj¡IdHS)z3Similar to :meth:`socket.socket.sendto`, but async.rFrŸN)r{rr^r(rQÚsendtorr¯©r    rLr
r
r r¿ësÿz_SocketType.sendtorÚsendmsgcÇsXt|ƒdkr<|ddk    r<t|ƒ}|j|dddIdH|d<| tjj|itj¡IdHS)z©Similar to :meth:`socket.socket.sendmsg`, but async.
 
            Only available on platforms where :meth:`socket.socket.sendmsg` is
            available.
 
            rirNFrŸ)    rnr{rr^r(rQrÁrr¯rÀr
r
r rÁþs
ÿz_SocketType.sendmsg).rrrr rŽrr’r•r–Úpropertyr:r;r<r˜r›rœržr¡r£r®r¯rr^rgrZ wait_readabler²r±r´r¸r¹rºr»r r(rQr¼r½r¾rdr¿rXrYrrÁÚ __classcell__r
r
r“r rBµs‚ö  
 
 
 
    $     J   ÿÿÿ 
 ÿ
ÿrB)rrrr)r)F)-rrrXr§rQr(Ú    functoolsrrdÚtypingrÚidnar5rrjrrrÚ ImportErrorrYZRunVarr!r&r%r'ÚAI_NUMERICHOSTÚAI_NUMERICSERVr1r0r?r@rDrIr rKrNrlÚ SOCK_STREAMrHrcr\r]rgrr‚rBr
r
r
r Ú<module>sd   
 
 
 
  
?  ÿÿ
 
    ü  
 
ÿÿ    
@