B
    ÐH/\½	  ã               @   s<   d Z ddlZddlmZ dgZd d¡ G dd„ deƒZdS )z(
Native thread-based hostname resolver.
é    N)Úget_hubÚResolverZfooZidnac               @   sR   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )r   a¹  
    Implementation of the resolver API using native threads and native resolution
    functions.

    Using the native resolution mechanisms ensures the highest
    compatibility with what a non-gevent program would return
    including good support for platform specific configuration
    mechanisms. The use of native (non-greenlet) threads ensures that
    a caller doesn't block other greenlets.

    This implementation also has the benefit of being very simple in comparison to
    :class:`gevent.resolver_ares.Resolver`.

    .. tip::

        Most users find this resolver to be quite reliable in a
        properly monkey-patched environment. However, there have been
        some reports of long delays, slow performance or even hangs,
        particularly in long-lived programs that make many, many DNS
        requests. If you suspect that may be happening to you, try the
        dnspython or ares resolver (and submit a bug report).
    Nc             C   s<   |d krt ƒ }|j| _tj|jkr8| jtjtjf7  _d S )N)r   Z
threadpoolÚpoolÚ_socketZgaierrorZ	NOT_ERRORZherror)ÚselfZhub© r   ú5lib/python3.7/site-packages/gevent/resolver/thread.pyÚ__init__(   s
    zResolver.__init__c             C   s   dt | ƒ| jf S )Nz1<gevent.resolver_thread.Resolver at 0x%x pool=%r>)Úidr   )r   r   r   r   Ú__repr__1   s    zResolver.__repr__c             C   s   d S )Nr   )r   r   r   r   Úclose4   s    zResolver.closec             G   s   | j  tj|¡S )N)r   Úapplyr   Úgethostbyname)r   Úargsr   r   r   r   :   s    zResolver.gethostbynamec             G   s   | j  tj|¡S )N)r   r   r   Úgethostbyname_ex)r   r   r   r   r   r   =   s    zResolver.gethostbyname_exc             O   s   | j  tj||¡S )N)r   r   r   Úgetaddrinfo)r   r   Úkwargsr   r   r   r   @   s    zResolver.getaddrinfoc             O   s   | j  tj||¡S )N)r   r   r   Úgethostbyaddr)r   r   r   r   r   r   r   C   s    zResolver.gethostbyaddrc             O   s   | j  tj||¡S )N)r   r   r   Úgetnameinfo)r   r   r   r   r   r   r   F   s    zResolver.getnameinfo)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r   r   r   r   r   r   r   r      s   
	)r   r   Z
gevent.hubr   Ú__all__ÚencodeÚobjectr   r   r   r   r   Ú<module>   s
   
