uvloop icon indicating copy to clipboard operation
uvloop copied to clipboard

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

Open jensbjorgensen opened this issue 1 year ago • 0 comments

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.

jensbjorgensen avatar Mar 13 '24 14:03 jensbjorgensen