Skip to content

Commit d9313ab

Browse files
authored
Merge pull request #56 from michalc/refactor/avoid-looking-up-request
refactor: avoid looking up a request in dictionary
2 parents 22c13e7 + 4cf8765 commit d9313ab

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

aiodnsresolver.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,13 @@ def parse_resource_record():
256256

257257

258258
async def recvfrom(loop, socks, max_bytes):
259-
for sock in socks:
259+
for sock, req in socks:
260260
try:
261-
return sock.recvfrom(max_bytes)
261+
return req, sock.recvfrom(max_bytes)
262262
except BlockingIOError:
263263
pass
264264

265-
def reader(sock):
265+
def reader(sock, req):
266266
def _reader():
267267
try:
268268
(data, addr) = sock.recvfrom(max_bytes)
@@ -275,17 +275,17 @@ def _reader():
275275
else:
276276
remove_readers()
277277
if not result.done():
278-
result.set_result((data, addr))
278+
result.set_result((req, (data, addr)))
279279
return _reader
280280

281-
fileno_socks = tuple((sock.fileno(), sock) for sock in socks)
281+
fileno_socks = tuple((sock.fileno(), sock, req) for sock, req in socks)
282282
result = Future()
283283

284-
for fileno, sock in fileno_socks:
285-
loop.add_reader(fileno, reader(sock))
284+
for fileno, sock, req in fileno_socks:
285+
loop.add_reader(fileno, reader(sock, req))
286286

287287
def remove_readers():
288-
for fileno, _ in fileno_socks:
288+
for fileno, _, __ in fileno_socks:
289289
loop.remove_reader(fileno)
290290

291291
try:
@@ -539,13 +539,12 @@ async def req():
539539

540540
last_exception = DnsError()
541541
while connections:
542-
connected_socks = tuple(
543-
sock for sock, req in connections.values())
542+
544543
try:
545-
response_data, addr_port = await recvfrom(loop, connected_socks, 512)
544+
req, (response_data, addr_port) = await recvfrom(loop,
545+
connections.values(), 512)
546546
except OSError as exception:
547-
logger.debug('Exception receiving from: %s',
548-
connected_socks)
547+
logger.debug('Exception receiving from: %s', connections)
549548
last_exception = exception
550549
set_timeout_cause(exception)
551550
continue
@@ -562,11 +561,6 @@ async def req():
562561
continue
563562

564563
logger.debug('Received response: %s', res)
565-
try:
566-
_, req = connections[addr_port]
567-
except KeyError:
568-
logger.debug('Already processed response from %s', addr_port)
569-
continue
570564

571565
trusted = res.qid == req.qid and res.qd == req.qd
572566
if not trusted:

test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ async def server():
943943
with socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) as sock:
944944
sock.setblocking(False)
945945
sock.bind(('', 10053))
946-
await recvfrom(loop, [sock], 512)
946+
await recvfrom(loop, [(sock, None)], 512)
947947
received.set()
948948

949949
self.addCleanup(patch_open())
@@ -1801,7 +1801,7 @@ async def server():
18011801
client_tasks = []
18021802
try:
18031803
while True:
1804-
data, addr = await recvfrom(loop, [sock], 512)
1804+
_, (data, addr) = await recvfrom(loop, [(sock, None)], 512)
18051805
client_tasks.append(
18061806
asyncio.ensure_future(client_task(data, addr)))
18071807
finally:

0 commit comments

Comments
 (0)