a
    zeV                     @   sP  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	yb   dZY n0 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ۃrfd dl Z ddd݄Z!edݡ ee jdރrd dl Z dddZ"ed ee jdrdd Z#ed ee drd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   s   |   o| dS )NZAF_isupper
startswithC r   /usr/lib/python3.9/socket.py<lambda>N       r   r   c                 C   s   |   o| dS )NZSOCK_r   r   r   r   r   r   S   r   MsgFlagc                 C   s   |   o| dS )NZMSG_r   r   r   r   r   r   X   r   AddressInfoc                 C   s   |   o| dS )NZAI_r   r   r   r   r   r   ]   r   z	127.0.0.1z::1c                 C   s&   z
|| W S  t y    |  Y S 0 d S 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&      r   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rtd8ddZn
d9ddZd:ddZdd Zd;d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rd.d/ Zd0d1 Znd2d/ Zd3d1 Zd4e_d5e_  ZS )<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   r2      s    zsocket.__init__c                 C   s   | S r   r   r3   r   r   r   	__enter__   s    zsocket.__enter__c                 G   s   | j s|   d S r   )r-   close)r3   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 }|sz |  }|r^|dt	| 7 }W n t
yr   Y n0 z |  }|r|dt	| 7 }W n t
y   Y n0 |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)   r7   r4   r5   r6   getsocknamestrerrorgetpeername)r3   closedsladdrraddrr   r   r   __repr__   s4    
zsocket.__repr__c                 C   s   t d| jjdd S )Nzcannot pickle z object)	TypeErrorr@   r'   r8   r   r   r   __getstate__  s    zsocket.__getstate__c                 C   s6   t |  }| j| j| j| j|d}||   |S )Nr7   )dupr7   r@   r4   r5   r6   
settimeout
gettimeout)r3   fdsockr   r   r   rM     s    z
socket.dupc                 C   sF   |   \}}t| j| j| j|d}t d u r>|  r>|d ||fS )NrL   T)_acceptr*   r4   r5   r6   getdefaulttimeoutrO   setblocking)r3   rP   addrrQ   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 p2| }d|v }d}	|rL|	d7 }	|rX|	d7 }	t| |	}
|  jd7  _|d u r|d}|d	k rtj}|d	kr|std
|
S |r|rt|
|
|}n|rt|
|}nt|
|}|r|S t	||||}||_
|S )N>   bwrW   z&invalid mode %r (only r, w, b allowed)r\   rW   r[   r=      r.   r   z!unbuffered streams must be binary)setr   SocketIOr,   ioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWriterTextIOWrappermode)r3   rf   	bufferingrX   rY   rZ   writingreadingbinaryrawmoderawbuffertextr   r   r   makefile.  s<    
zsocket.makefilesendfiler   c              
   C   s  |  ||| |  }z| }W n2 ttjfyT } zt|W Y d }~n
d }~0 0 zt|j}W n, t	y } zt|W Y d }~n
d }~0 0 |sdS t
|p|d}|  }	|	dkrtdttdrt }
nt }
|
|tj d}|
j}tj} z|	r||	std|r6|| }|dkr6qz|||||}W nb tyn   |	sd|  Y q Y n\ t	y } z$|dkrt||d W Y d }~n(d }~0 0 |dkrq||7 }||7 }q |W |dkrt|dr|| S n"|dkrt|dr|| 0 d S )Nr   i   @&non-blocking sockets are not supportedPollSelectorz	timed outseek)_check_sendfile_paramsr7   AttributeErrorr`   UnsupportedOperationr&   osfstatst_sizeOSErrorminrO   r   hasattr	selectorsrr   SelectSelectorregisterEVENT_WRITEselectrp   r1   timeoutBlockingIOErrorrs   )r3   fileoffsetcountsocknor7   errfsize	blocksizer   selector
total_sentselector_selectos_sendfilesentr   r   r   _sendfile_use_sendfileZ  sh    







 zsocket._sendfile_use_sendfilec                 C   s   t dd S )Nz,os.sendfile() not available on this platform)r&   r3   r   r   r   r   r   r   r     s    c           
   
   C   s   |  ||| |  dkr"td|r0|| |r>t|dnd}d}|j}| j}z|rpt|| |}|dkrpqt||}|sqz||}	W n ty   Y qY q0 ||	7 }|	t	|k r||	d  }qqTqqT|W |dkrt
|dr|||  S n&|dkrt
|dr|||  0 d S )Nr   rq   i    rs   )rt   rO   r   rs   r{   readsend
memoryviewr   lenr|   )
r3   r   r   r   r   r   	file_read	sock_senddatar   r   r   r   _sendfile_use_send  sB    

 zsocket._sendfile_use_sendc                 C   sd   dt |ddvrtd| jt@ s*td|d ur`t|tsJtd||dkr`td|d S )Nr[   rf   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   r5   r0   
isinstanceintrJ   formatr   r   r   r   rt     s    

zsocket._check_sendfile_paramsc                 C   s6   z|  |||W S  ty0   | ||| Y S 0 d S r   )r   r&   r   r   r   r   r   rp     s    zsocket.sendfilec                 C   s*   | j dkr|  j d8  _ | jr&|   d S )Nr   r]   )r,   r-   r:   r8   r   r   r   _decref_socketios  s    
zsocket._decref_socketiosc                 C   s   | |  d S r   )r:   )r3   _ssr   r   r   _real_close  s    zsocket._real_closec                 C   s   d| _ | jdkr|   d S )NTr   )r-   r,   r   r8   r   r   r   r:     s    
zsocket.closec                    s   d| _ t  S )NT)r-   superdetachr8   r@   r   r   r     s    zsocket.detachc                    s   t t jtS r   )r    r   r4   r   r8   r   r   r   r4     s    zsocket.familyc                    s   t t jtS r   )r    r   r5   r   r8   r   r   r   r5     s    zsocket.typentc                 C   s   t |  S r   )rw   Zget_handle_inheritabler7   r8   r   r   r   get_inheritable  s    zsocket.get_inheritablec                 C   s   t |  | d S r   )rw   Zset_handle_inheritabler7   r3   inheritabler   r   r   set_inheritable  s    zsocket.set_inheritablec                 C   s   t |  S r   )rw   r   r7   r8   r   r   r   r     s    c                 C   s   t |  | d S r   )rw   r   r7   r   r   r   r   r     s    z&Get the inheritable flag of the socketz&Set the inheritable flag of the socket)r.   r.   r.   N)rW   N)r   N)r   N)r   N)r   N) r'   r(   r)   	__slots__r2   r9   r<   rI   rK   rM   rV   ro   r|   rw   r   r   rt   rp   r   r1   r*   r   r:   r   propertyr4   r5   namer   r   __doc____classcell__r   r   r   r   r*      s@   
*
A

$


r*   c                 C   s   t | }t||||S r   )rM   r*   )rP   r4   r5   r6   nfdr   r   r   r
     s    r
   sendmsgc              	   C   s    |  |tjtjtd|fgS Ni)r   r1   
SOL_SOCKET
SCM_RIGHTSarray)rQ   buffersfdsflagsaddressr   r   r   send_fds&  s    
r   recvmsgc                 C   s   t  d}| |t||j \}}}}|D ]B\}}	}
|tjkr.|	tjkr.||
d t|
t|
|j    q.|t	|||fS r   )
r   r   r1   CMSG_LENitemsizer   r   	frombytesr   list)rQ   bufsizemaxfdsr   r   msgancdatarU   
cmsg_level	cmsg_type	cmsg_datar   r   r   recv_fds2  s    

r   sharec                 C   s   t ddd| S Nr   )r*   )infor   r   r   	fromshareF  s    r   
socketpairc                 C   sf   | d u r(zt } W n ty&   t} Y n0 t| ||\}}t| ||| }t| ||| }||fS r   )AF_UNIX	NameErrorr/   r1   r   r*   r   )r4   r5   r6   ar[   r   r   r   r   Q  s    
c           
   	   C   s  | t krt}n| tkrt}ntd|tkr4td|dkrDtdt| ||}z||df |  |	 d d \}}t| ||}zN|
d z|||f W n ttfy   Y n0 |
d | \}}	W n   |   Y n0 W |  n
|  0 ||fS )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)r/   
_LOCALHOSTAF_INET6_LOCALHOST_V6r   r0   r*   bindlistenrA   rT   connectr   InterruptedErrorrV   r:   )
r4   r5   r6   hostZlsockrU   portZcsockZssock_r   r   r   r   f  s8    


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                       sl   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 )r_   c                 C   sZ   |dvrt d| tj|  || _d|vr6|d7 }|| _d|v | _d|v | _d| _d S )N)rW   r\   rwrbwbrwbzinvalid mode: %rr[   rW   r\   F)	r   r`   	RawIOBaser2   _sock_mode_reading_writing_timeout_occurred)r3   rQ   rf   r   r   r   r2     s    

zSocketIO.__init__c              
   C   s   |    |   | jrtdz| j|W S  tyF   d| _ Y q ty } z*|jd t	v rpW Y d }~d S  W Y d }~qd }~0 0 qd S )Nz!cannot read from timed out objectTr   )
_checkClosed_checkReadabler   rz   r   	recv_intor   rC   r;   _blocking_errnosr3   r[   er   r   r   readinto  s    zSocketIO.readintoc              
   C   sf   |    |   z| j|W S  ty` } z*|jd tv rJW Y d }~d S  W Y d }~n
d }~0 0 d S r   )r   _checkWritabler   r   rC   r;   r   r   r   r   r   write  s    zSocketIO.writec                 C   s   | j rtd| jS NzI/O operation on closed socket.)rE   r   r   r8   r   r   r   readable  s    zSocketIO.readablec                 C   s   | j rtd| jS r   )rE   r   r   r8   r   r   r   writable  s    zSocketIO.writablec                    s   | j rtdt  S r   )rE   r   r   seekabler8   r   r   r   r     s    zSocketIO.seekablec                 C   s   |    | j S r   )r   r   r7   r8   r   r   r   r7     s    zSocketIO.filenoc                 C   s   | j s|  S dS d S )Nr.   )rE   r7   r8   r   r   r   r     s    zSocketIO.namec                 C   s   | j S r   )r   r8   r   r   r   rf     s    zSocketIO.modec                 C   s*   | j r
d S tj|  | j  d | _d S r   )rE   r`   r   r:   r   r   r8   r   r   r   r:     s
    
zSocketIO.close)r'   r(   r)   r2   r   r   r   r   r   r7   r   r   rf   r:   r   r   r   r   r   r_     s   

r_   r=   c                 C   sj   |   } | r| dkrt } zt| \}}}W n ty>   Y n(0 |d| |D ]} d| v rP qfqP|} | S )Nz0.0.0.0r   .)stripgethostnamegethostbyaddrrC   insert)r   hostnamealiasesipaddrsr   r   r   r   
  s    
r   c                 C   s   | \}}d }t ||dtD ]}|\}}}	}
}d }zDt|||	}|turP|| |r^|| || d }|W   S  ty } z |}|d ur|  W Y d }~qd }~0 0 q|d urz|W d }qd }0 ntdd S )Nr   z!getaddrinfo returns an empty list)	getaddrinfor0   r*   _GLOBAL_DEFAULT_TIMEOUTrN   r   r   rC   r:   )r   r   source_addressr   r   r   resafsocktyper6   	canonnamesarQ   r   r   r   r   r   '  s.    



 r   c                  C   sv   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 sP0    Y  W n t	yp   Y dS 0 d S )NIPPROTO_IPV6IPV6_V6ONLYFr   T)
has_ipv6r|   r1   r*   r   r0   
setsockoptr   r  rC   )rQ   r   r   r   r   T  s    &r   F)r4   backlog
reuse_portdualstack_ipv6c             
   C   sl  |rt tdstd|r8t s(td|tkr8tdt|t}ztjdvrt tdrz|	t
td W n ty~   Y n0 |r|	t
td tr|tkr|r|	ttd n"t td	rt td
r|	ttd z||  W nB ty$ } z(d|j| f }t|j|d W Y d }~n
d }~0 0 |d u r:|  n
|| |W S  tyf   |   Y n0 d S )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|   r1   r   r   r   r*   r0   rw   r   r  r   r	  rC   r  r  r   r  r   strerrorerrnor   r:   )r   r4   r  r  r  rQ   r   r   r   r   r   r   d  sN    



$


r   c                 C   sP   g }t | |||||D ]2}|\}}	}}
}|t|tt|	t||
|f q|S r   )r1   r   appendr    r   r   )r   r   r4   r5   r6   r   addrlistr   r   r   r   r   r   r   r   r     s    r   )r   )r   N)r   )r=   )r   r   r   r   )2r1   rw   sysr`   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   r0   r   r/   r   r   r   r_   r   objectr   r   r   r   r   r   r   r   r   <module>3   sL   

  F
	




$
u

-E