quinn
quinn copied to clipboard
Support all-or-nothing writes to `SendStream`
There's currently no way in quinn_proto::SendStream (and consequently quinn::SendStream) to perform all-or-nothing writes.
As a concrete example, I have a &mut [Bytes] that I'd like to write to a quinn::SendStream in its entirety if there's sufficient send capacity, or not at all. The end-user API could look something like fn try_write_all_chunks(&mut self, bufs: &mut [Bytes]) -> Result<(), WriteError> - note that this function is not asynchronous.
The current functionality seems to be a consequence of how quinn_proto::write_source works. It currently takes in a BytesSource, acquires a lock, checks the write limit, and then writes from the BytesSource up to the limit.
https://github.com/quinn-rs/quinn/blob/dcc8048974ce9b1ca6b365019149b5586ed88f4a/quinn-proto/src/connection/streams/mod.rs#L205-L243
Conceptually, this could be implemented by augmenting quinn_proto::write_source to also take in min_limit parameter.
There's probably a more flexible end-user abstraction than the try_write_all_chunks function I proposed above, but first wanted to get feedback on the idea. I'm happy to draft a PR for this if the idea seems generally useful.
Can you elaborate on the use case, and cite any prior art? We've already got an awful lot of variations on "write".
Closing this, as I think I can work around this with cwnd from Connection::stats().