B
    2*\m                 @   sl  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 yd dlZW n e	k
rd   dZY nX e
eddZe
eddZe
eddZd	d
dddg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Zej dri 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/< d0ed1< d2ed3< d4ed5< d6ed7< ed8 G d9d: d:eZG d;d< d<e jZdLd=d	Ze e jd>rd?d@ Z!ed@ e e dArde"d fdBdAZ#ne$e"d fdCdAZ#edA dDe#_%eehZ&G dEdF dFej'Z(dMdHd
Z)e* Z+e+dfdIdZ,dNdJdKZ-dS )O    N)*)IntEnumIntFlagEBADF	   EAGAIN   EWOULDBLOCKfromfdgetfqdncreate_connectionAddressFamily
SocketKindc             C   s   |   o| dS )NZAF_)isupper
startswith)C r   1C:\ALexclude\prg\programme\Python37\Lib\socket.py<lambda>L       r   c             C   s   |   o| dS )NZSOCK_)r   r   )r   r   r   r   r   Q   r   ZMsgFlagc             C   s   |   o| dS )NZMSG_)r   r   )r   r   r   r   r   V   r   ZAddressInfoc             C   s   |   o| dS )NZAI_)r   r   )r   r   r   r   r   [   r   z	127.0.0.1z::1c             C   s"   y|| S  t k
r   | S X d S )N)
ValueError)valueZ
enum_klassr   r   r   _intenum_convertera   s    r   winz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 The socket operation would blocki3'  z,A blocking operation is already in progress.i4'  zThe network address is in use.i@'  zThe connection has been reset.iF'  zThe network has been shut down.iJ'  zThe operation timed out.iL'  zConnection refused.iM'  zThe name is too long.iO'  zThe host is down.iP'  zThe host is unreachable.iQ'  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dddgZd8ddZdd	 Zd
d Zdd Zdd Zdd Z	dd Z
d9ddddddZeedrvd:ddZn
d;d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d0d1 Zd2d3 Znd4d1 Zd5d3 Zd6e_d7e_  ZS )>socket__weakref___io_refs_closedNc             C   sP   |d k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   r'      s    zsocket.__init__c             C   s   | S )Nr   )r(   r   r   r   	__enter__   s    zsocket.__enter__c             G   s   | j s|   d S )N)r"   close)r(   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 }|sy |  }|r^|dt	| 7 }W n t
k
rt   Y nX y |  }|r|dt	| 7 }W n t
k
r   Y nX |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   r,   r)   r*   r+   getsocknamestrerrorZgetpeername)r(   closedsZladdrZraddrr   r   r   __repr__   s0    

zsocket.__repr__c             C   s   t dd S )NzCannot serialize socket object)	TypeError)r(   r   r   r   __getstate__   s    zsocket.__getstate__c             C   s6   t |  }| j| j| j| j|d}||   |S )N)r,   )dupr,   r4   r)   r*   r+   
settimeout
gettimeout)r(   fdsockr   r   r   r=      s    z
socket.dupc             C   sF   |   \}}t| j| j| j|d}t d kr>|  r>|d ||fS )N)r,   T)Z_acceptr   r)   r*   r+   Zgetdefaulttimeoutr?   setblocking)r(   r@   addrrA   r   r   r   accept   s
    
zsocket.acceptr)encodingerrorsnewlinec            C   s   t |dddhks td|f d|k}d|kp4| }d|k}d}	|rN|	d7 }	|rZ|	d7 }	t| |	}
|  jd7  _|d kr~d}|dk rtj}|dkr|std	|
S |r|rt|
|
|}n|rt|
|}nt|
|}|r|S t	||||}||_
|S )
NrE   wbz&invalid mode %r (only r, w, b allowed)r1      r#   r   z!unbuffered streams must be binary)setr   SocketIOr!   ioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWriterTextIOWrappermode)r(   rT   	bufferingrF   rG   rH   ZwritingZreadingZbinaryZrawmoderawbuffertextr   r   r   makefile   s<    
zsocket.makefilesendfiler   c          
   C   s  |  ||| |  }y| }W n0 ttjfk
rR } zt|W d d }~X Y nX yt|j}W n* t	k
r } zt|W d d }~X Y nX |sdS |s|n|}| 
 }	|	dkrtdttdrt }
nt }
|
|tj d}|
j}tj}zx|	r||	std|r.|| }|dkr.P y|||||}W n^ tk
rd   |	s^|  wY q t	k
r } z|dkrt||d W d d }~X Y qX |dkrP ||7 }||7 }qW |S |dkrt|dr|| X d S )Nr   z&non-blocking sockets are not supportedPollSelectorz	timed outseek)_check_sendfile_paramsr,   AttributeErrorrN   UnsupportedOperationr   osfstatst_sizeOSErrorr?   r   hasattr	selectorsr[   ZSelectSelectorregisterZEVENT_WRITEZselectrZ   r&   timeoutBlockingIOErrorr\   )r(   fileoffsetcountZsocknor,   errZfsize	blocksizerg   Zselector
total_sentZselector_selectZos_sendfilesentr   r   r   _sendfile_use_sendfile	  s`    





zsocket._sendfile_use_sendfilec             C   s   t dd S )Nz,os.sendfile() not available on this platform)r   )r(   ri   rj   rk   r   r   r   rp   J  s    c       
   
   C   s   |  ||| |  dkr"td|r0|| |r>t|dnd}d}|j}| j}zx|rrt|| |}|dkrrP t||}|sP xLy||}	W n tk
r   wY qX ||	7 }|	t	|k r||	d  }qP qW qVW |S |dkrt
|dr|||  X d S )Nr   z&non-blocking sockets are not supportedi    r\   )r]   r?   r   r\   minreadsend
memoryviewrh   lenrd   )
r(   ri   rj   rk   rm   rn   Z	file_readZ	sock_senddataro   r   r   r   _sendfile_use_sendN  s<    

zsocket._sendfile_use_sendc             C   sd   dt |ddkrtd| jt@ s*td|d k	r`t|tsJtd||dkr`td|d S )NrJ   rT   z$file should be opened in binary modez+only SOCK_STREAM type sockets are supportedz+count must be a positive integer (got {!r})r   )r3   r   r*   r%   
isinstanceintr;   format)r(   ri   rj   rk   r   r   r   r]   r  s    

zsocket._check_sendfile_paramsc             C   s2   y|  |||S  tk
r,   | |||S X d S )N)rp   r   rw   )r(   ri   rj   rk   r   r   r   rZ     s    zsocket.sendfilec             C   s*   | j dkr|  j d8  _ | jr&|   d S )Nr   rK   )r!   r"   r.   )r(   r   r   r   _decref_socketios  s    
zsocket._decref_socketiosc             C   s   | |  d S )N)r.   )r(   Z_ssr   r   r   _real_close  s    zsocket._real_closec             C   s   d| _ | jdkr|   d S )NTr   )r"   r!   r|   )r(   r   r   r   r.     s    
zsocket.closec                s   d| _ t  S )NT)r"   superdetach)r(   )r4   r   r   r~     s    zsocket.detachc                s   t t jtS )N)r   r}   r)   r   )r(   )r4   r   r   r)     s    zsocket.familyc                s   t t jtS )N)r   r}   r*   r   )r(   )r4   r   r   r*     s    zsocket.typentc             C   s   t |  S )N)r`   get_handle_inheritabler,   )r(   r   r   r   get_inheritable  s    zsocket.get_inheritablec             C   s   t |  | d S )N)r`   set_handle_inheritabler,   )r(   inheritabler   r   r   set_inheritable  s    zsocket.set_inheritablec             C   s   t |  S )N)r`   r   r,   )r(   r   r   r   r     s    c             C   s   t |  | d S )N)r`   r   r,   )r(   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)rE   N)r   N)r   N)r   N)r   N) r   r   r   	__slots__r'   r-   r0   r:   r<   r=   rD   rY   rd   r`   rp   rw   r]   rZ   r{   r&   r   r|   r.   r~   propertyr)   r*   namer   r   __doc____classcell__r   r   )r4   r   r      s:   

)
A

$


r   c             C   s   t | }t||||S )N)r=   r   )r@   r)   r*   r+   Znfdr   r   r   r
     s    Zsharec             C   s   t ddd| S )Nr   )r   )infor   r   r   	fromshare  s    r   
socketpairc             C   sh   | d kr*yt } W n tk
r(   t} Y nX t| ||\}}t| ||| }t| ||| }||fS )N)ZAF_UNIX	NameErrorr$   r&   r   r   r~   )r)   r*   r+   arJ   r   r   r   r     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| ||}yP|
d y|||f W n ttfk
r   Y nX |
d | \}}	W n   |   Y nX W d |  X ||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$   
_LOCALHOSTZAF_INET6_LOCALHOST_V6r   r%   r   bindZlistenr5   rB   connectrh   InterruptedErrorrD   r.   )
r)   r*   r+   hostZlsockrC   portZcsockZssock_r   r   r   r     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 )rM   c             C   sZ   |dkrt d| tj|  || _d|kr6|d7 }|| _d|k| _d|k| _d| _d S )N)rE   rI   rwrbwbZrwbzinvalid mode: %rrJ   rE   rI   F)	r   rN   	RawIOBaser'   _sock_mode_reading_writing_timeout_occurred)r(   rA   rT   r   r   r   r'   3  s    

zSocketIO.__init__c          
   C   s   |    |   | jrtdxby| j|S  tk
rH   d| _ Y q  tk
r| } z|jd t	krjd S  W d d }~X Y q X q W d S )Nz!cannot read from timed out objectTr   )
_checkClosed_checkReadabler   rc   r   Z	recv_intorg   r7   r/   _blocking_errnos)r(   rJ   er   r   r   readinto?  s    zSocketIO.readintoc          
   C   sX   |    |   y| j|S  tk
rR } z|jd tkr@d S  W d d }~X Y nX d S )Nr   )r   _checkWritabler   rs   r7   r/   r   )r(   rJ   r   r   r   r   writeV  s    zSocketIO.writec             C   s   | j rtd| jS )NzI/O operation on closed socket.)r8   r   r   )r(   r   r   r   readablef  s    zSocketIO.readablec             C   s   | j rtd| jS )NzI/O operation on closed socket.)r8   r   r   )r(   r   r   r   writablem  s    zSocketIO.writablec                s   | j rtdt  S )NzI/O operation on closed socket.)r8   r   r}   seekable)r(   )r4   r   r   r   t  s    zSocketIO.seekablec             C   s   |    | j S )N)r   r   r,   )r(   r   r   r   r,   {  s    zSocketIO.filenoc             C   s   | j s|  S dS d S )Nr#   )r8   r,   )r(   r   r   r   r     s    zSocketIO.namec             C   s   | j S )N)r   )r(   r   r   r   rT     s    zSocketIO.modec             C   s*   | j r
d S tj|  | j  d | _d S )N)r8   rN   r   r.   r   r{   )r(   r   r   r   r.     s
    
zSocketIO.close)r   r   r   r'   r   r   r   r   r   r,   r   r   rT   r.   r   r   r   )r4   r   rM   "  s   rM   r1   c             C   sn   |   } | r| dkrt } yt| \}}}W n tk
r@   Y n*X |d| x|D ]} d| krTP qTW |} | S )Nz0.0.0.0r   .)stripZgethostnameZgethostbyaddrr7   insert)r   ZhostnamealiasesZipaddrsr   r   r   r     s    	
c             C   s   | \}}d }xt ||dtD ]}|\}}}	}
}d }y>t|||	}|tk	rR|| |r`|| || d }|S  tk
r } z|}|d k	r|  W d d }~X Y qX qW |d k	r|ntdd S )Nr   z!getaddrinfo returns an empty list)	getaddrinfor%   r   _GLOBAL_DEFAULT_TIMEOUTr>   r   r   r7   r.   )Zaddressrg   Zsource_addressr   r   rl   resafsocktyper+   	canonnamesarA   r   r   r   r   r     s*    


c             C   sT   g }xJt | |||||D ]2}|\}}	}}
}|t|tt|	t||
|f qW |S )N)r&   r   appendr   r   r   )r   r   r)   r*   r+   flagsZaddrlistr   r   r   r   r   r   r   r   r     s    r   )r   )r1   )r   r   r   r   ).r&   r`   sysrN   re   enumr   r   errnoImportErrorr3   r   r   r	   __all__extend_get_exports_list_convertr   r   r   r   r   Z_realsocketplatformlowerr   r   r   	Exceptionr   r
   rd   r   r%   r   r$   r   r   r   rM   r   objectr   r   r   r   r   r   r   <module>1   s    






  F
	
$
u
'