
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`                      @   s   d dl Z d dlZd dlmZmZmZmZ ddlmZ ddl	m
Z
 dZzd dlZW n ek
rh   dZY nX dZG dd	 d	eZG d
d deZereneZdS )    N)AnyDictListOptional   )AbstractResolver)get_running_loop)ThreadedResolverAsyncResolverDefaultResolverFc                   @   s^   e Zd ZdZdeej ddddZdej	fe
eeeee
ef  ddd	Zdd
ddZdS )r	   zsUse Executor for synchronous getaddrinfo() calls, which defaults to
    concurrent.futures.ThreadPoolExecutor.
    N)loopreturnc                 C   s   t || _d S N)r   _loop)selfr    r   C/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/resolver.py__init__   s    zThreadedResolver.__init__r   )hostnameportfamilyr   c              
      s   | j j||tj|tjdI d H }g }|D ]r\}}}}}|tjkrj|d rjt|tjtjB \}	}
t	|
}n|d d \}	}|
||	|||tjtjB d q(|S )N)typer   flags      r   hostr   r   protor   )r   ZgetaddrinfosocketZSOCK_STREAMZAI_ADDRCONFIGAF_INET6ZgetnameinfoZNI_NUMERICHOSTZNI_NUMERICSERVintappendAI_NUMERICHOSTAI_NUMERICSERV)r   r   r   r   Zinfoshosts_r   addressr   Z_portr   r   r   resolve   s4     


zThreadedResolver.resolver   c                    s   d S r   r   r   r   r   r   close@   s    zThreadedResolver.close)N)__name__
__module____qualname____doc__r   asyncioAbstractEventLoopr   r   AF_INETstrr    r   r   r   r'   r*   r   r   r   r   r	      s      $r	   c                   @   s   e Zd ZdZdeej eeddddZde	j
feeeeeeef  ddd	Zde	j
feeeeeeef  dd
dZddddZdS )r
   z9Use the `aiodns` package to make asynchronous DNS lookupsN)r   argskwargsr   c                 O   sH   t d krtdt|| _t j|d|i|| _t| jdsD| j| _d S )Nz Resolver requires aiodns libraryr   gethostbyname)	aiodnsRuntimeErrorr   r   ZDNSResolver	_resolverhasattr_resolve_with_queryr'   )r   r   r3   r4   r   r   r   r   G   s    
zAsyncResolver.__init__r   )r   r   r   r   c           	   
      s   z| j ||I d H }W nL tjjk
rd } z*t|jdkrF|jd nd}t||W 5 d }~X Y nX g }|jD ]$}|	||||dt
jt
jB d qp|std|S )Nr   DNS lookup failedr   r   )r8   r5   r6   errorDNSErrorlenr3   OSErrorZ	addressesr!   r   r"   r#   )	r   r   r   r   respexcmsgr$   r&   r   r   r   r'   W   s&    

zAsyncResolver.resolvec           
   
      s   |t jkrd}nd}z| j||I d H }W nL tjjk
rx } z*t|jdkrZ|jd nd}t	||W 5 d }~X Y nX g }|D ] }	|
||	j||dt jd q|st	d|S )NZAAAAAr   r;   r   r   )r   r   r8   Zqueryr6   r<   r=   r>   r3   r?   r!   r   r"   )
r   r   r   r   Zqtyper@   rA   rB   r$   Zrrr   r   r   r:   q   s,    
z!AsyncResolver._resolve_with_queryr(   c                    s
   | j  S r   )r8   cancelr)   r   r   r   r*      s    zAsyncResolver.close)N)r+   r,   r-   r.   r   r/   r0   r   r   r   r1   r2   r    r   r   r'   r:   r*   r   r   r   r   r
   D   s2           r
   )r/   r   typingr   r   r   r   abcr   Zhelpersr   __all__r6   ImportErrorZaiodns_defaultr	   r
   r   r   r   r   r   <module>   s   
0Q