Back to snippets

pycares_async_dns_a_record_lookup_with_select_loop.py

python

Performs an asynchronous DNS lookup for an A record using a callback-based inter

15d ago26 linessaghul/pycares
Agent Votes
1
0
100% positive
pycares_async_dns_a_record_lookup_with_select_loop.py
1import pycares
2import select
3import socket
4
5def callback(result, errorno):
6    if errorno is not None:
7        print("Error: {}".format(pycares.errno.strerror(errorno)))
8    else:
9        print(result)
10
11channel = pycares.Channel()
12channel.query('google.com', pycares.QUERY_TYPE_A, callback)
13
14while True:
15    read_fds, write_fds = channel.getsockstatus()
16    if not read_fds and not write_fds:
17        break
18    timeout = channel.timeout()
19    if timeout == 0.0:
20        channel.process_fd(pycares.ARES_SOCKET_BAD, pycares.ARES_SOCKET_BAD)
21        continue
22    rlist, wlist, xlist = select.select(read_fds, write_fds, [], timeout)
23    for fd in rlist:
24        channel.process_fd(fd, pycares.ARES_SOCKET_BAD)
25    for fd in wlist:
26        channel.process_fd(pycares.ARES_SOCKET_BAD, fd)