-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
gh-113812: Allow DatagramTransport.sendto to send empty data #115199
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-113812: Allow DatagramTransport.sendto to send empty data #115199
Conversation
@gvanrossum -- This might cause an issue with the flow control of the transport. Since the buffer size is calculated with only the payload (and not the entire datagram). The write buffer could in theory be flooded with zero-length datagrams, and the high watermark will never be crossed. cpython/Lib/asyncio/selector_events.py Line 1279 in 67d6bed
|
Oh, that's a very good point. I think we could add a constant value to the "buffer size" for each packet added -- the only use for the buffer size is to interact with flow control. In fact, after skimming the UDP Wikipedia page, I think we can add 8 for each packet, since that's the protocol's header size. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, but let's do something about flow control first.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LG -- I'll merge now!
Sorry, I'd like one more doc change. The code and docs are actually fine, but I feel this deserves a What's New entry (Doc/whatsnew/3.13.rst). A bullet in the existing |
No worries :) Let me know what you think of this wording I just added! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! Will merge later tonight.
Sorry Guido, just pushed a documentation change to for the version change note in the Documentation Edit: Also pushed a typo fix (repeated "will now") sorry! |
Thanks again, @ordinary-jamie! |
…ython#115199) Also include the UDP packet header sizes (8 bytes per packet) in the buffer size reported to the flow control subsystem.
…ython#115199) Also include the UDP packet header sizes (8 bytes per packet) in the buffer size reported to the flow control subsystem.
…ython#115199) Also include the UDP packet header sizes (8 bytes per packet) in the buffer size reported to the flow control subsystem.
Update
DatagramTransport.sendto
method to not return when data is an empty bytes object. This allows users to send zero-length datagrams (used for example in Time Protocol RFC 868).📚 Documentation preview 📚: https://cpython-previews--115199.org.readthedocs.build/