U '7`@sddlZddlZddlmZmZmZmZddlmZddl m Z dZ z ddl Z Wne k rhdZ YnXdZGdd d eZGd d d eZereneZdS) N)AnyDictListOptional)AbstractResolver)get_running_loop)ThreadedResolver AsyncResolverDefaultResolverFc@s^eZdZdZd eejddddZdej fe e e e e e efddd Zdd d d ZdS)r zsUse Executor for synchronous getaddrinfo() calls, which defaults to concurrent.futures.ThreadPoolExecutor. N)loopreturncCst||_dSN)r_loop)selfr rC/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/resolver.py__init__szThreadedResolver.__init__r)hostnameportfamilyr c s|jj||tj|tjdIdH}g}|D]r\}}}}}|tjkrj|drjt|tjtjB\} } t | }n|dd\} }| || |||tj tj Bdq(|S)N)typerflagsrhostrrprotor) r getaddrinfosocket SOCK_STREAM AI_ADDRCONFIGAF_INET6 getnameinfoNI_NUMERICHOSTNI_NUMERICSERVintappendAI_NUMERICHOSTAI_NUMERICSERV) rrrrZinfoshosts_raddressrZ_portrrrresolves4     zThreadedResolver.resolver csdSrrrrrrclose@szThreadedResolver.close)N)__name__ __module__ __qualname____doc__rasyncioAbstractEventLooprrAF_INETstrr&rrrr-r0rrrrr s $r c@seZdZdZdeejeeddddZde j fe e e e ee efddd Zde j fe e e e ee efdd d Zdd d dZdS)r z9Use the `aiodns` package to make asynchronous DNS lookupsN)r argskwargsr cOsHtdkrtdt||_tj|d|i||_t|jdsD|j|_dS)Nz Resolver requires aiodns libraryr gethostbyname) aiodns RuntimeErrorrrZ DNSResolver _resolverhasattr_resolve_with_queryr-)rr r9r:rrrrGs   zAsyncResolver.__init__r)rrrr c sz|j||IdH}WnLtjjk rd}z*t|jdkrF|jdnd}t||W5d}~XYnXg}|jD]$}| ||||dt j t j Bdqp|std|S)NrDNS lookup failedrr) r>r;r<errorDNSErrorlenr9OSErrorZ addressesr'rr(r)) rrrrrespexcmsgr*r,rrrr-Ws&   zAsyncResolver.resolvec s|tjkrd}nd}z|j||IdH}WnLtjjk rx}z*t|jdkrZ|jdnd}t ||W5d}~XYnXg}|D] } | || j ||dtj dq|st d|S)NZAAAAArrArr) rr"r>queryr<rBrCrDr9rEr'rr() rrrrZqtyperFrGrHr*Zrrrrrr@qs,  z!AsyncResolver._resolve_with_queryr.cs |jSr)r>cancelr/rrrr0szAsyncResolver.close)N)r1r2r3r4rr5r6rrrr7r8r&rrr-r@r0rrrrr Ds2   r )r5rtypingrrrrabcrZhelpersr__all__r< ImportErrorZaiodns_defaultr r r rrrrs    0Q