@@ -256,13 +256,13 @@ def parse_resource_record():
256256
257257
258258async 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 :
0 commit comments