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) rZ getaddrinfosocketZ SOCK_STREAMZ AI_ADDRCONFIGAF_INET6Z getnameinfoZNI_NUMERICHOSTZNI_NUMERICSERVintappendAI_NUMERICHOSTAI_NUMERICSERV) rrrrZinfoshosts_raddressrZ_portrrrresolves4     zThreadedResolver.resolver csdSrrrrrrclose@szThreadedResolver.close)N)__name__ __module__ __qualname____doc__rasyncioAbstractEventLooprrAF_INETstrr rrrr'r*rrrrr 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 r3r4rrrrGs   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) r8r5r6errorDNSErrorlenr3OSErrorZ 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)NZAAAAArr;rr) rrr8Zqueryr6r<r=r>r3r?r!rr") rrrrZqtyper@rArBr$Zrrrrrr:qs,  z!AsyncResolver._resolve_with_queryr(cs |jSr)r8Zcancelr)rrrr*szAsyncResolver.close)N)r+r,r-r.rr/r0rrrr1r2r rrr'r:r*rrrrr Ds2   r )r/rtypingrrrrabcrZhelpersr__all__r6 ImportErrorZaiodns_defaultr r r rrrrs    0Q