MagicStack / uvloop

Ultra fast asyncio event loop.
Apache License 2.0
10.44k stars 548 forks source link

udp errors should result in protocol.error_received, inconsistent with vanilla asyncio #601

Closed jensbjorgensen closed 3 months ago

jensbjorgensen commented 8 months ago

I observed a condition in production where a temporary network outage caused a UDP sendto to fail. In stock asyncio this would result in a call to error_received on the protocol object, but in uvloop this results in a fatal error that closes the transport. This is a rather nasty thing to happen since with vanilla asyncio when the transient network condition was resolved the transport could again be used, but with uvloop you would have to close the transport and repoen it.. See cpython source here:

https://github.com/python/cpython/blob/main/Lib/asyncio/selector_events.py#L1240

Sorry I don't have a script/fragment to reproduce the error, to do this you'd have to manipulate the networking stack such that the interface was not available after the transport was created. It's possible of course but I don't know of an easy way to do this.