
    R?g                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKr\R                  (       a  S SKJrJrJrJrJr   " S S\	5      rg)	    N)Future)gen)IOLoop)Resolveris_valid_ip)	GeneratorAnyListTupleDictc            
           \ rS rSrSrSS jrS\S\S\SS4S	 jrS\S
\SS4S jr	\
R                   SS\S\S\SS4S jj5       rSrg)CaresResolver   a  Name resolver based on the c-ares library.

This is a non-blocking and non-threaded resolver.  It may not produce the
same results as the system resolver, but can be used for non-blocking
resolution when threads cannot be used.

``pycares`` will not return a mix of ``AF_INET`` and ``AF_INET6`` when
``family`` is ``AF_UNSPEC``, so it is only recommended for use in
``AF_INET`` (i.e. IPv4).  This is the default for
``tornado.simple_httpclient``, but other libraries may default to
``AF_UNSPEC``.

.. versionchanged:: 5.0
   The ``io_loop`` argument (deprecated since version 4.1) has been removed.

.. deprecated:: 6.2
   This class is deprecated and will be removed in Tornado 7.0. Use the default
   thread-based resolver instead.
returnNc                     [         R                  " 5       U l        [        R                  " U R
                  S9U l        0 U l        g )N)sock_state_cb)r   currentio_looppycaresChannel_sock_state_cbchannelfds)selfs    @/usr/lib/python3/dist-packages/tornado/platform/caresresolver.py
initializeCaresResolver.initialize$   s-    ~~'T5H5HI    fdreadablewritablec                    U(       a  [         R                  OSU(       a  [         R                  OS-  nU(       d)  U R                  R	                  U5        U R
                  U	 g XR
                  ;   a*  U R                  R                  X5        X@R
                  U'   g U R                  R                  XR                  U5        X@R
                  U'   g )Nr   )	r   READWRITEr   remove_handlerr   update_handleradd_handler_handle_events)r   r   r    r!   states        r   r   CaresResolver._sock_state_cb)   s     (aHFLLRSTLL''+88^LL''2 HHRLLL$$R)<)<eD HHRLr   eventsc                     [         R                  n[         R                  nU[        R                  -  (       a  UnU[        R                  -  (       a  UnU R
                  R                  X45        g N)r   ARES_SOCKET_BADr   r#   r$   r   
process_fd)r   r   r+   read_fdwrite_fds        r   r(   CaresResolver._handle_events5   sL    ))**FKKGFLL H2r   hostportfamilyz*Generator[Any, Any, List[Tuple[int, Any]]]c              #   b  ^
#    [        U5      (       a  U/nOw[        5       m
U R                  R                  XU
4S j5        T
v u  pVU(       a4  [	        SU< S[
        R                  R                  U5      < SU< 35      eUR                  n/ nU H  nSU;   a  [        R                  n	O'SU;   a  [        R                  n	O[        R                  n	U[        R                  :w  a  X9:w  a  [	        SX94-  5      eUR                  [        R                  " [         U	5      X445        M     U$ 7f)Nc                 (   > TR                  X45      $ r-   )
set_result)resulterrorfuts     r   <lambda>'CaresResolver.resolve.<locals>.<lambda>H   s    CNNF?4Sr   zC-Ares returned error z: z while resolving .:z%Requested socket family %d but got %d)r   r   r   gethostbynameIOErrorr   errnostrerror	addressessocketAF_INETAF_INET6	AF_UNSPECappendtypingcastint)r   r3   r4   r5   rD   r9   r:   addrinfoaddressaddress_familyr;   s             @r   resolveCaresResolver.resolve>   s     tI (CLL&&S #&IMFgmm44U;TC  ((I Gg~!'!'!'!1!1)))f.F;v>VV  OOV[[n=OP ! s   D,D/)r   r   r   )r   N)r   )__name__
__module____qualname____firstlineno____doc__r   rL   boolr   r(   r   	coroutinestrrP   __static_attributes__ r   r   r   r      s    (

! 
! 
! 
! 
!3 3c 3d 3 	]]23",/	5 r   r   )r   rE   tornado.concurrentr   tornador   tornado.ioloopr   tornado.netutilr   r   rJ   TYPE_CHECKINGr   r	   r
   r   r   r   r[   r   r   <module>ra      s7      %  ! 1 	88OH Or   