o
    >c                     @   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   Z/Volumes/Data/workspace/med-macos-weekly/build/ExtProjs/pyncpp/python/source/Lib/socket.py<lambda>N       r   r   c                 C   r   )NZSOCK_r   r   r   r   r   r   S   r   ZMsgFlagc                 C   r   )NZMSG_r   r   r   r   r   r   X   r   Z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   r1      s   
zsocket.__init__c                 C   s   | S r   r   r2   r   r   r   	__enter__   s   zsocket.__enter__c                 G   s   | j s	|   d S d S r   )r,   close)r2   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(   r6   r3   r4   r5   getsocknamestrerrorZgetpeername)r2   closedsZladdrZraddrr   r   r   __repr__   s>   
zsocket.__repr__c                 C   s   t d| jjd)Nzcannot pickle z object)	TypeErrorr?   r&   r7   r   r   r   __getstate__     zsocket.__getstate__c                 C   s8   	 t |  }| j| j| j| j|d}||   |S )Nr6   )dupr6   r?   r3   r4   r5   
settimeout
gettimeout)r2   fdsockr   r   r   rJ     s
   z
socket.dupc                 C   sH   	 |   \}}t| j| j| j|d}t d u r |  r |d ||fS )NrI   T)Z_acceptr)   r3   r4   r5   ZgetdefaulttimeoutrL   setblocking)r2   rM   addrrN   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>   rR   bwz&invalid mode %r (only r, w, b allowed)rW   rR   rV   r<      r-   r   z!unbuffered streams must be binary)setr   SocketIOr+   ioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWritertext_encodingTextIOWrappermode)r2   rb   	bufferingrS   rT   rU   ZwritingZreadingZbinaryZ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_paramsr6   AttributeErrorr[   UnsupportedOperationr%   osfstatst_sizeOSErrorminrL   r   hasattr	selectorsrj   ZSelectSelectorregisterZEVENT_WRITEZselectrh   TimeoutErrorBlockingIOErrorrk   )r2   fileoffsetcountZsocknor6   errZfsize	blocksizetimeoutZselector
total_sentZselector_selectZ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%   r2   ry   rz   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   ri   i    Trk   )rl   rL   r   rk   rs   readsend
memoryviewrx   lenrt   )
r2   ry   rz   r{   r}   r   	file_readZ	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 )NrV   rb   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   r4   r/   
isinstanceintrF   formatr   r   r   r   rl     s   

zsocket._check_sendfile_paramsc                 C   s4   	 z|  |||W S  ty   | ||| Y S w r   )r   r%   r   r   r   r   r   rh     s   zsocket.sendfilec                 C   s.   | j dkr|  j d8  _ | jr|   d S d S )Nr   rX   )r+   r,   r9   r7   r   r   r   _decref_socketios  s
   
zsocket._decref_socketiosc                 C   s   | |  d S r   )r9   )r2   Z_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   r7   r   r   r   r9     s   
zsocket.closec                    s   	 d| _ t  S )NT)r,   superdetachr7   r?   r   r   r     s   
zsocket.detachc                       	 t t jtS r   )r   r   r3   r   r7   r   r   r   r3        zsocket.familyc                    r   r   )r   r   r4   r   r7   r   r   r   r4     r   zsocket.typentc                 C      t |  S r   )ro   Zget_handle_inheritabler6   r7   r   r   r   get_inheritable     zsocket.get_inheritablec                 C      t |  | d S r   )ro   Zset_handle_inheritabler6   r2   inheritabler   r   r   set_inheritable  rH   zsocket.set_inheritablec                 C   r   r   )ro   r   r6   r7   r   r   r   r     r   c                 C   r   r   )ro   r   r6   r   r   r   r   r     rH   z&Get the inheritable flag of the socketz&Set the inheritable flag of the socket)r-   r-   r-   N)rR   Nr   N) r&   r'   r(   	__slots__r1   r8   r;   rE   rG   rJ   rQ   rg   rt   ro   r   r   rl   rh   r   r0   r)   r   r9   r   propertyr3   r4   namer   r   __doc____classcell__r   r   r   r   r)      sD    

+
A
$



r)   c                 C   s   	 t | }t||||S r   )rJ   r)   )rM   r3   r4   r5   Znfdr   r   r   r
     s   r
   sendmsgc              	   C   s"   	 |  |tjtjtd|fgS Ni)r   r0   
SOL_SOCKET
SCM_RIGHTSarray)rN   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   r0   CMSG_LENitemsizer   r   	frombytesr   list)rN   bufsizeZmaxfdsr   r   msgancdatarP   
cmsg_level	cmsg_type	cmsg_datar   r   r   recv_fds3  s   
r   Z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	NameErrorr.   r0   r   r)   r   )r3   r4   r5   arV   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)r.   
_LOCALHOSTAF_INET6_LOCALHOST_V6r   r/   r)   bindlistenr@   rO   connectrx   InterruptedErrorrQ   r9   )
r3   r4   r5   hostZlsockrP   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 )rZ   c                 C   sZ   |dvr
t d| tj|  || _d|vr|d7 }|| _d|v | _d|v | _d| _d S )N)rR   rW   ZrwZrbwbZrwbzinvalid mode: %rrV   rR   rW   F)	r   r[   	RawIOBaser1   _sock_mode_reading_writing_timeout_occurred)r2   rN   rb   r   r   r   r1     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   rr   r   Z	recv_intor~   rB   errno_blocking_errnosr2   rV   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   rB   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.)rC   r   r   r7   r   r   r   readable     zSocketIO.readablec                 C   r   r   )rC   r   r   r7   r   r   r   writable  r   zSocketIO.writablec                    s   	 | j rtdt  S r   )rC   r   r   seekabler7   r   r   r   r     s   
zSocketIO.seekablec                 C   s   	 |    | j S r   )r   r   r6   r7   r   r   r   r6     s   
zSocketIO.filenoc                 C   s   | j s|  S dS )Nr-   )rC   r6   r7   r   r   r   r     s   zSocketIO.namec                 C   s   | j S r   )r   r7   r   r   r   rb     s   zSocketIO.modec                 C   s,   	 | j rd S tj|  | j  d | _d S r   )rC   r[   r   r9   r   r   r7   r   r   r   r9      s   

zSocketIO.close)r&   r'   r(   r1   r   r   r   r   r   r6   r   r   rb   r9   r   r   r   r   r   rZ     s    

rZ   r<   c                 C   sp   	 |   } | r| dv rt } z	t| \}}}W n
 ty!   Y | S w |d| |D ]	} d| v r3 | S q*|} | S )N)z0.0.0.0z::r   .)stripZgethostnameZgethostbyaddrrB   insert)r   ZhostnamealiasesZ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)	getaddrinfor/   r)   _GLOBAL_DEFAULT_TIMEOUTrK   r   r   rB   r9   )r   r~   Zsource_addressr   r   r|   resafsocktyper5   	canonnamesarN   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_ipv6rt   r0   r)   r   r/   
setsockoptr   r   rB   )rN   r   r   r   r   U  s   (r   F)r3   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_REUSEADDRrX   r   r   r   z+%s (while attempting to bind on address %r))rt   r0   r   r   r   r)   r/   ro   r   r   r   r   rB   r   r   r   r   r   strerrorr   r   r9   )r   r3   r   r   r   rN   r|   r   r   r   r   r   e  sZ   




r   c                 C   sR   	 g }t | |||||D ]}|\}}	}}
}|t|tt|	t||
|f q|S r   )r0   r   appendr   r   r   )r   r   r3   r4   r5   r   Zaddrlistr   r   r   r   r   r   r   r   r     s   r   )r   r   )r<   )r   r   r   r   )2r0   ro   sysr[   ru   enumr   r   r   ImportErrorr>   r   r   r	   __all__extend_get_exports_list	_convert_r&   r   r   r   platformlowerr   r$   r   	Exceptionr%   r)   r
   rt   r   r   r   r   r/   r   r.   r   r   r   rZ   r   objectr   r   r   r   r   r   r   r   r   <module>   sR  / 
  
G	





$
u
-E