gh-113812: Allow DatagramTransport.sendto to send empty data#115199
gh-113812: Allow DatagramTransport.sendto to send empty data#115199gvanrossum merged 5 commits intopython:mainfrom
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. |
gvanrossum
left a comment
There was a problem hiding this comment.
LGTM, but let's do something about flow control first.
|
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! |
gvanrossum
left a comment
There was a problem hiding this comment.
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.sendtomethod 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/