@@ -226,10 +226,10 @@ def datagram_received(
226226 if self .suppress_duplicate_packet (data , now ):
227227 # Guard against duplicate packets
228228 log .debug (
229- 'Ignoring duplicate message received from %r:%r ( socket %d) (%d bytes) as [%r]' ,
229+ 'Ignoring duplicate message received from %r:%r [ socket %s] (%d bytes) as [%r]' ,
230230 addr ,
231231 port ,
232- self .transport . get_extra_info ( 'socket' ). fileno () ,
232+ self ._socket_description ,
233233 len (data ),
234234 data ,
235235 )
@@ -249,20 +249,20 @@ def datagram_received(
249249 msg = DNSIncoming (data , scope , now )
250250 if msg .valid :
251251 log .debug (
252- 'Received from %r:%r ( socket %d) : %r (%d bytes) as [%r]' ,
252+ 'Received from %r:%r [ socket %s] : %r (%d bytes) as [%r]' ,
253253 addr ,
254254 port ,
255- self .transport . get_extra_info ( 'socket' ). fileno () ,
255+ self ._socket_description ,
256256 msg ,
257257 len (data ),
258258 data ,
259259 )
260260 else :
261261 log .debug (
262- 'Received from %r:%r ( socket %d) : (%d bytes) [%r]' ,
262+ 'Received from %r:%r [ socket %s] : (%d bytes) [%r]' ,
263263 addr ,
264264 port ,
265- self .transport . get_extra_info ( 'socket' ). fileno () ,
265+ self ._socket_description ,
266266 len (data ),
267267 data ,
268268 )
@@ -316,12 +316,22 @@ def _respond_query(
316316
317317 self .zc .handle_assembled_query (packets , addr , port , v6_flow_scope )
318318
319+ @property
320+ def _socket_description (self ) -> str :
321+ """A human readable description of the socket."""
322+ assert self .transport is not None
323+ fileno = self .transport .get_extra_info ('socket' ).fileno ()
324+ sockname = self .transport .get_extra_info ('sockname' )
325+ return f"{ fileno } ({ sockname } )"
326+
319327 def error_received (self , exc : Exception ) -> None :
320328 """Likely socket closed or IPv6."""
321- assert self .transport is not None
322- self .log_warning_once (
323- 'Error with socket %d: %s' , self .transport .get_extra_info ('socket' ).fileno (), exc
324- )
329+ # We preformat the message string with the socket as we want
330+ # log_exception_once to log a warrning message once PER EACH
331+ # different socket in case there are problems with multiple
332+ # sockets
333+ msg_str = f"Error with socket { self ._socket_description } ): %s"
334+ self .log_exception_once (exc , msg_str , exc )
325335
326336 def connection_made (self , transport : asyncio .BaseTransport ) -> None :
327337 self .transport = cast (asyncio .DatagramTransport , transport )
0 commit comments