Skip to content

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

Merged
merged 5 commits into from
Feb 17, 2024

Conversation

ordinary-jamie
Copy link
Contributor

@ordinary-jamie ordinary-jamie commented Feb 9, 2024

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/

@ordinary-jamie
Copy link
Contributor Author

@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.

self._buffer_size += len(data)

@gvanrossum
Copy link
Member

@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.

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.

Copy link
Member

@gvanrossum gvanrossum left a 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.

Copy link
Member

@gvanrossum gvanrossum left a 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!

@gvanrossum
Copy link
Member

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 asyncio section under "Improved Modules" should suffice. I'd like it to mention both the ability to send 0-length packets and the change to buffer size (since it can affect details around flow control). Probably a good idea to mention the latter in the news file too.

@ordinary-jamie
Copy link
Contributor Author

No worries :) Let me know what you think of this wording I just added!

Copy link
Member

@gvanrossum gvanrossum left a 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.

@ordinary-jamie
Copy link
Contributor Author

ordinary-jamie commented Feb 17, 2024

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!

@gvanrossum gvanrossum merged commit 73e8637 into python:main Feb 17, 2024
@gvanrossum
Copy link
Member

Thanks again, @ordinary-jamie!

woodruffw pushed a commit to woodruffw-forks/cpython that referenced this pull request Mar 4, 2024
…ython#115199)

Also include the UDP packet header sizes (8 bytes per packet)
in the buffer size reported to the flow control subsystem.
diegorusso pushed a commit to diegorusso/cpython that referenced this pull request Apr 17, 2024
…ython#115199)

Also include the UDP packet header sizes (8 bytes per packet)
in the buffer size reported to the flow control subsystem.
LukasWoodtli pushed a commit to LukasWoodtli/cpython that referenced this pull request Jan 22, 2025
…ython#115199)

Also include the UDP packet header sizes (8 bytes per packet)
in the buffer size reported to the flow control subsystem.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants