o
     JAf}                     @   sR  	 d dl Z d dl T d dlZd dlZd dlZd dlZd dlmZmZ zd dlZW n e	y2   dZY nw e
eddZe
eddZe
eddZg d	Zeee  ed
edd  ededd  ededd  ededd  dZdZdd Zej dr	i Zded< ded< ded< ded< d ed!< d"ed#< d$ed%< d&ed'< d(ed)< d*ed+< d,ed-< d.ed/< d0ed1< d2ed3< d4ed5< d6ed7< d8ed9< d:ed;< d<ed=< d>ed?< d@edA< dBedC< dDedE< dFedG< dHedI< dJedK< dLedM< dNedO< dPedQ< dRedS< dTedU< dVedW< dXedY< dZed[< d\ed]< d^ed_< d`eda< dbedc< ddede< dfedg< dhedi< djedk< dledm< dnedo< dpedq< dreds< dtedu< dvedw< dxedy< dzed{< d|ed}< d~ed< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< edԡ G ddք deZG dd؄ de jZdddڄZee jdۃr4d dl Z ddd݄Z!edݡ ee jdރrId dl Z dddZ"ed ee jdrYdd Z#ed ee drhde$d fddZ%ne&e$d fddZ%ed de%_'eehZ(G dd dej)Z*dddZ+e, Z-e-dfddZ.dd Z/e&ddddddZ0dddZ1dS )    N)*)IntEnumIntFlagEBADF	   EAGAIN   EWOULDBLOCK)fromfdgetfqdncreate_connectioncreate_serverhas_dualstack_ipv6AddressFamily
SocketKindr   c                 C      |   o| dS )NZAF_isupper
startswithC r   /usr/lib/python3.10/socket.py<lambda>N       r   r   c                 C   r   )NZSOCK_r   r   r   r   r   r   S   r   MsgFlagc                 C   r   )NZMSG_r   r   r   r   r   r   X   r   AddressInfoc                 C   r   )NZAI_r   r   r   r   r   r   ]   r   z	127.0.0.1z::1c                 C   s$   	 z|| W S  t y   |  Y S w N)
ValueError)value
enum_klassr   r   r   _intenum_converterc   s   
r!   winz)Specified event object handle is invalid.   zInsufficient memory available.   z#One or more parameters are invalid.W   zOverlapped operation aborted.i  z2Overlapped I/O event object not in signaled state.i  z)Overlapped operation will complete later.i  zThe operation was interrupted.i'  zA bad file handle was passed.i'  zPermission denied.i'  z!A fault occurred on the network??i'  z#An invalid operation was attempted.i&'  zToo many open files.i('  z The socket operation would blocki3'  z,A blocking operation is already in progress.i4'  zOperation already in progress.i5'  zSocket operation on nonsocket.i6'  zDestination address required.i7'  zMessage too long.i8'  zProtocol wrong type for socket.i9'  zBad protocol option.i:'  zProtocol not supported.i;'  zSocket type not supported.i<'  zOperation not supported.i='  zProtocol family not supported.i>'  z0Address family not supported by protocol family.i?'  zThe network address is in use.i@'  z Cannot assign requested address.iA'  zNetwork is down.iB'  zNetwork is unreachable.iC'  z$Network dropped connection on reset.iD'  z!Software caused connection abort.iE'  zThe connection has been reset.iF'  zNo buffer space available.iG'  zSocket is already connected.iH'  zSocket is not connected.iI'  zThe network has been shut down.iJ'  zToo many references.iK'  zThe operation timed out.iL'  zConnection refused.iM'  zCannot translate name.iN'  zThe name is too long.iO'  zThe host is down.iP'  zThe host is unreachable.iQ'  zDirectory not empty.iR'  zToo many processes.iS'  zUser quota exceeded.iT'  zDisk quota exceeded.iU'  zStale file handle reference.iV'  zItem is remote.iW'  z!Network subsystem is unavailable.ik'  z!Winsock.dll version out of range.il'  z(Successful WSAStartup not yet performed.im'  zGraceful shutdown in progress.iu'  z*No more results from WSALookupServiceNext.iv'  zCall has been canceled.iw'  z Procedure call table is invalid.ix'  zService provider is invalid.iy'  z&Service provider failed to initialize.iz'  zSystem call failure.i{'  zService not found.i|'  zClass type not found.i}'  i~'  zCall was canceled.i'  zDatabase query was refused.i'  zHost not found.i*  z Nonauthoritative host not found.i*  zThis is a nonrecoverable error.i*  z*Valid name, no data record requested type.i*  zQoS receivers.i*  zQoS senders.i*  zNo QoS senders.i*  zQoS no receivers.i +  zQoS request confirmed.i+  zQoS admission error.i+  zQoS policy failure.i+  zQoS bad style.i+  zQoS bad object.i+  zQoS traffic control error.i+  zQoS generic error.i+  zQoS service type error.i+  zQoS flowspec error.i	+  zInvalid QoS provider buffer.i
+  zInvalid QoS filter style.i+  i+  zIncorrect QoS filter count.i+  zInvalid QoS object length.i+  zIncorrect QoS flow count.i+  zUnrecognized QoS object.i+  zInvalid QoS policy object.i+  zInvalid QoS flow descriptor.i+  z'Invalid QoS provider-specific flowspec.i+  z)Invalid QoS provider-specific filterspec.i+  z&Invalid QoS shape discard mode object.i+  z Invalid QoS shaping rate object.i+  z!Reserved policy QoS element type.i+  errorTabc                   @   s   e Zd ZdS )_GiveupOnSendfileN)__name__
__module____qualname__r   r   r   r   r'      s    r'   c                       s&  e Zd Z	 g dZd6ddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
d7ddddddZeedr;d8ddZnd8ddZd8ddZdd Zd8dd Zd!d" Zejfd#d$Zd%d& Z fd'd(Ze fd)d*Ze fd+d,Zejd-krd.d/ Zd0d1 Znd2d/ Zd3d1 Zd4e_d5e_  ZS )9socket)__weakref___io_refs_closedNc                 C   sP   |d u r|dkr
t }|dkrt}|dkrd}tj| |||| d| _d| _d S )Nr/   r   F)AF_INETSOCK_STREAM_socketr+   __init__r-   r.   )selffamilytypeprotofilenor   r   r   r3      s   
zsocket.__init__c                 C   s   | S r   r   r4   r   r   r   	__enter__   s   zsocket.__enter__c                 G   s   | j s	|   d S d S r   )r.   close)r4   argsr   r   r   __exit__   s   zsocket.__exit__c                 C   s   	 t | dd}d| jj| jj|rdnd|  | j| j| jf }|sUz|  }|r0|dt	| 7 }W n	 t
y:   Y nw z|  }|rJ|dt	| 7 }W n	 t
yT   Y nw |d7 }|S )	Nr.   Fz,<%s.%s%s fd=%i, family=%s, type=%s, proto=%iz	 [closed] z
, laddr=%sz
, raddr=%s>)getattr	__class__r)   r*   r8   r5   r6   r7   getsocknamestrerrorgetpeername)r4   closedsladdrraddrr   r   r   __repr__   s>   
zsocket.__repr__c                 C   s   t d| jjd)Nzcannot pickle z object)	TypeErrorrA   r(   r9   r   r   r   __getstate__     zsocket.__getstate__c                 C   s8   	 t |  }| j| j| j| j|d}||   |S )Nr8   )dupr8   rA   r5   r6   r7   
settimeout
gettimeout)r4   fdsockr   r   r   rO     s
   z
socket.dupc                 C   sH   	 |   \}}t| j| j| j|d}t d u r |  r |d ||fS )NrN   T)_acceptr+   r5   r6   r7   getdefaulttimeoutrQ   setblocking)r4   rR   addrrS   r   r   r   accept  s   
zsocket.acceptr)encodingerrorsnewlinec                C   s  	 t |h dkstd|f d|v }d|v p| }d|v }d}	|r'|	d7 }	|r-|	d7 }	t| |	}
|  jd7  _|d u r?d}|d	k rFtj}|d	krR|sPtd
|
S |r^|r^t|
|
|}n|rgt|
|}nt|
|}|rq|S t	|}t
||||}||_|S )N>   rY   wbz&invalid mode %r (only r, w, b allowed)r]   rY   r^   r>      r/   r   z!unbuffered streams must be binary)setr   SocketIOr-   ioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWritertext_encodingTextIOWrappermode)r4   ri   	bufferingrZ   r[   r\   writingreadingbinaryrawmoderawbuffertextr   r   r   makefile.  s@   

zsocket.makefilesendfiler   c              
   C   s  |  ||| |  }z| }W n ttjfy$ } zt|d }~ww zt|j}W n t	y= } zt|d }~ww |sBdS t
|pF|d}|  }	|	dkrUtdttdr_t }
nt }
|
|tj d}|
j}tj}ze	 |	r~||	s~td|r|| }|dkrn<z	|||||}W n$ ty   |	s|  Y qs t	y } z|dkrt||d d }~ww |dkrn	||7 }||7 }qt|W |dkrt|dr|| S S S |dkrt|dr|| w w w )Nr   i   @&non-blocking sockets are not supportedPollSelectorTz	timed outseek)_check_sendfile_paramsr8   AttributeErrorrb   UnsupportedOperationr'   osfstatst_sizeOSErrorminrQ   r   hasattr	selectorsru   SelectSelectorregisterEVENT_WRITEselectrs   TimeoutErrorBlockingIOErrorrv   )r4   fileoffsetcountsocknor8   errfsize	blocksizetimeoutselector
total_sentselector_selectos_sendfilesentr   r   r   _sendfile_use_sendfile[  st   

	zsocket._sendfile_use_sendfilec                 C   s   t d)Nz,os.sendfile() not available on this platform)r'   r4   r   r   r   r   r   r   r     s   c           
   
   C   s  |  ||| |  dkrtd|r|| |rt|dnd}d}|j}| j}zR	 |r9t|| |}|dkr9n.t||}|sBn%	 z||}	W n	 tyR   Y qBw ||	7 }|	t	|k rd||	d  }nnqCq+|W |dkrzt
|dr{|||  S S S |dkrt
|dr|||  w w w )Nr   rt   i    Trv   )rw   rQ   r   rv   r~   readsend
memoryviewr   lenr   )
r4   r   r   r   r   r   	file_read	sock_senddatar   r   r   r   _sendfile_use_send  sH   
zsocket._sendfile_use_sendc                 C   sh   dt |ddvrtd| jt@ std|d ur0t|ts%td||dkr2td|d S d S )Nr^   ri   z$file should be opened in binary modez+only SOCK_STREAM type sockets are supportedz+count must be a positive integer (got {!r})r   )r@   r   r6   r1   
isinstanceintrK   formatr   r   r   r   rw     s   

zsocket._check_sendfile_paramsc                 C   s4   	 z|  |||W S  ty   | ||| Y S w r   )r   r'   r   r   r   r   r   rs     s   zsocket.sendfilec                 C   s.   | j dkr|  j d8  _ | jr|   d S d S )Nr   r_   )r-   r.   r;   r9   r   r   r   _decref_socketios  s
   
zsocket._decref_socketiosc                 C   s   | |  d S r   )r;   )r4   _ssr   r   r   _real_close  s   zsocket._real_closec                 C   s    d| _ | jdkr|   d S d S )NTr   )r.   r-   r   r9   r   r   r   r;     s   
zsocket.closec                    s   	 d| _ t  S )NT)r.   superdetachr9   rA   r   r   r     s   
zsocket.detachc                       	 t t jtS r   )r!   r   r5   r   r9   r   r   r   r5        zsocket.familyc                    r   r   )r!   r   r6   r   r9   r   r   r   r6     r   zsocket.typentc                 C      t |  S r   )rz   Zget_handle_inheritabler8   r9   r   r   r   get_inheritable     zsocket.get_inheritablec                 C      t |  | d S r   )rz   Zset_handle_inheritabler8   r4   inheritabler   r   r   set_inheritable  rM   zsocket.set_inheritablec                 C   r   r   )rz   r   r8   r9   r   r   r   r     r   c                 C   r   r   )rz   r   r8   r   r   r   r   r     rM   z&Get the inheritable flag of the socketz&Set the inheritable flag of the socket)r/   r/   r/   N)rY   Nr   N) r(   r)   r*   	__slots__r3   r:   r=   rJ   rL   rO   rX   rr   r   rz   r   r   rw   rs   r   r2   r+   r   r;   r   propertyr5   r6   namer   r   __doc____classcell__r   r   r   r   r+      sD    

+
A
$



r+   c                 C   s   	 t | }t||||S r   )rO   r+   )rR   r5   r6   r7   nfdr   r   r   r
     s   r
   sendmsgc              	   C   s"   	 |  |tjtjtd|fgS Ni)r   r2   
SOL_SOCKET
SCM_RIGHTSarray)rS   buffersfdsflagsaddressr   r   r   send_fds'  s   
r   recvmsgc                 C   s   	 t  d}| |t||j \}}}}|D ]!\}}	}
|tjkr9|	tjkr9||
d t|
t|
|j    q|t	|||fS r   )
r   r   r2   CMSG_LENitemsizer   r   	frombytesr   list)rS   bufsizemaxfdsr   r   msgancdatarW   
cmsg_level	cmsg_type	cmsg_datar   r   r   recv_fds3  s   
r   sharec                 C   s   	 t ddd| S )Nr   )r+   )infor   r   r   	fromshareG  s   r   
socketpairc                 C   sh   	 | d u rzt } W n ty   t} Y nw t| ||\}}t| ||| }t| ||| }||fS r   )AF_UNIX	NameErrorr0   r2   r   r+   r   )r5   r6   r7   ar^   r   r   r   r   R  s   c           
   	   C   s  | t krt}n| tkrt}ntd|tkrtd|dkr"tdt| ||}zT||df |  |	 d d \}}t| ||}z'|
d z	|||f W n ttfy^   Y nw |
d | \}}	W n   |   W |  ||fS |  w )Nz?Only AF_INET and AF_INET6 socket address families are supportedz)Only SOCK_STREAM socket type is supportedr   zOnly protocol zero is supported   FT)r0   
_LOCALHOSTAF_INET6_LOCALHOST_V6r   r1   r+   bindlistenrB   rV   connectr   InterruptedErrorrX   r;   )
r5   r6   r7   hostZlsockrW   portZcsockZssock_r   r   r   r   g  s>   


a8  socketpair([family[, type[, proto]]]) -> (socket object, socket object)
Create a pair of socket objects from the sockets returned by the platform
socketpair() function.
The arguments are the same as for socket() except the default family is AF_UNIX
if defined on the platform; otherwise, the default is AF_INET.
c                       sn   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Z fddZdd Z	e
dd Ze
dd Zdd Z  ZS )ra   c                 C   sZ   |dvr
t d| tj|  || _d|vr|d7 }|| _d|v | _d|v | _d| _d S )N)rY   r]   rwrbwbrwbzinvalid mode: %rr^   rY   r]   F)	r   rb   	RawIOBaser3   _sock_mode_reading_writing_timeout_occurred)r4   rS   ri   r   r   r   r3     s   


zSocketIO.__init__c              
   C   sx   	 |    |   | jrtd	 z| j|W S  ty#   d| _  ty; } z|jt	v r6W Y d }~d S  d }~ww )Nz!cannot read from timed out objectT)
_checkClosed_checkReadabler   r}   r   	recv_intor   rD   errno_blocking_errnosr4   r^   er   r   r   readinto  s"   
zSocketIO.readintoc              
   C   sT   	 |    |   z| j|W S  ty) } z|jtv r$W Y d }~d S  d }~ww r   )r   _checkWritabler   r   rD   r   r   r   r   r   r   write  s   
zSocketIO.writec                 C      	 | j rtd| jS NzI/O operation on closed socket.)rF   r   r   r9   r   r   r   readable     zSocketIO.readablec                 C   r   r   )rF   r   r   r9   r   r   r   writable  r   zSocketIO.writablec                    s   	 | j rtdt  S r   )rF   r   r   seekabler9   r   r   r   r     s   
zSocketIO.seekablec                 C   s   	 |    | j S r   )r   r   r8   r9   r   r   r   r8     s   
zSocketIO.filenoc                 C   s   | j s|  S dS )Nr/   )rF   r8   r9   r   r   r   r     s   zSocketIO.namec                 C   s   | j S r   )r   r9   r   r   r   ri     s   zSocketIO.modec                 C   s,   	 | j rd S tj|  | j  d | _d S r   )rF   rb   r   r;   r   r   r9   r   r   r   r;      s   

zSocketIO.close)r(   r)   r*   r3   r   r   r   r   r   r8   r   r   ri   r;   r   r   r   r   r   ra     s    

ra   r>   c                 C   sp   	 |   } | r| dkrt } z	t| \}}}W n
 ty!   Y | S w |d| |D ]	} d| v r3 | S q*|} | S )Nz0.0.0.0r   .)stripgethostnamegethostbyaddrrD   insert)r   hostnamealiasesipaddrsr   r   r   r     s$   	r   c                 C   s   	 | \}}d }t ||dtD ]I}|\}}}	}
}d }z"t|||	}|tur)|| |r0|| || d }|W   S  tyW } z|}|d urM|  W Y d }~qd }~ww |d urbz|d }w td)Nr   z!getaddrinfo returns an empty list)	getaddrinfor1   r+   _GLOBAL_DEFAULT_TIMEOUTrP   r   r   rD   r;   )r   r   source_addressr   r   r   resafsocktyper7   	canonnamesarS   r   r   r   r   r   (  s4   



r   c                  C   sx   	 t rttdrttdsdS z"ttt} | ttd 	 W d    W dS 1 s*w   Y  W d S  t	y;   Y dS w )NIPPROTO_IPV6IPV6_V6ONLYFr   T)
has_ipv6r   r2   r+   r   r1   
setsockoptr  r  rD   )rS   r   r   r   r   U  s   (r   F)r5   backlog
reuse_portdualstack_ipv6c             
   C   sV  	 |rt tdstd|rt std|tkrtdt|t}z|tjdvr@t tdr@z	|	t
td W n	 ty?   Y nw |rI|	t
td trj|tkrj|rY|	ttd nt td	rjt td
rj|	ttd z||  W n ty } zd|j| f }t|j|d d }~ww |d u r|  |W S || |W S  ty   |   w )NSO_REUSEPORTz+SO_REUSEPORT not supported on this platformz-dualstack_ipv6 not supported on this platformz'dualstack_ipv6 requires AF_INET6 family)r   cygwinSO_REUSEADDRr_   r   r  r  z+%s (while attempting to bind on address %r))r   r2   r   r   r   r+   r1   rz   r   r  r   r  rD   r  r  r  r  r   strerrorr   r   r;   )r   r5   r  r  r  rS   r   r   r   r   r   r   e  sZ   




r   c                 C   sR   	 g }t | |||||D ]}|\}}	}}
}|t|tt|	t||
|f q|S r   )r2   r  appendr!   r   r   )r   r   r5   r6   r7   r   addrlistr  r  r	  r
  r  r   r   r   r    s   r  )r   r   )r>   )r   r   r   r   )2r2   rz   sysrb   r   enumr   r   r   ImportErrorr@   r   r   r	   __all__extend_get_exports_list	_convert_r(   r   r   r!   platformlowerr   r&   r  	Exceptionr'   r+   r
   r   r   r   r   r   r1   r   r0   r   r   r   ra   r   objectr  r   r   r   r  r   r   r   r   <module>   sR  / 
  
G	





$
u
-E