
    i	                     @    d Z ddlZddlmZ dgZ G d de          ZdS )z(
Native thread-based hostname resolver.
    N)get_hubResolverc                   D    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
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                     |t                      }|j        | _        t          j        |j        vr(|xj        t          j        t          j        fz  c_        d S d S N)r   
threadpoolpool_socketgaierror	NOT_ERRORherror)selfhubs     A/usr/local/lib/python3.11/dist-packages/gevent/resolver/thread.py__init__zResolver.__init__$   sQ    ;))CN	3=00 MMg.??MMMM 10    c                     dt          |           j        t          |           j        t          |           | j        fz  S )Nz<%s.%s at 0x%x pool=%r>)type
__module____name__idr	   r   s    r   __repr__zResolver.__repr__-   s;    (DJJ,A,0JJ,?,.tHHdi,A A 	Ar   c                     d S r    r   s    r   closezResolver.close2   s    r   c                 L    | j                             t          j        |          S r   )r	   applyr
   gethostbynamer   argss     r   r   zResolver.gethostbyname8   s    yw4d;;;r   c                 L    | j                             t          j        |          S r   )r	   r   r
   gethostbyname_exr    s     r   r#   zResolver.gethostbyname_ex;   s    yw7>>>r   c                 N    | j                             t          j        ||          S r   )r	   r   r
   getaddrinfor   r!   kwargss      r   r%   zResolver.getaddrinfo>       yw2D&AAAr   c                 N    | j                             t          j        ||          S r   )r	   r   r
   gethostbyaddrr&   s      r   r*   zResolver.gethostbyaddrA   s    yw4dFCCCr   c                 N    | j                             t          j        ||          S r   )r	   r   r
   getnameinfor&   s      r   r,   zResolver.getnameinfoD   r(   r   r   )r   r   __qualname____doc__r   r   r   r   r#   r%   r*   r,   r   r   r   r   r      s         ,@ @ @ @A A A
  < < <? ? ?B B BD D DB B B B Br   )r.   r
   
gevent.hubr   __all__objectr   r   r   r   <module>r2      ss            ,8B 8B 8B 8B 8Bv 8B 8B 8B 8B 8Br   