On Tue, 06 Nov 2012 11:51:10 +0000, Julian Yon wrote:
On Tue, 6 Nov 2012 01:06:56 -0500 Roger Dingledine arma@mit.edu wrote:
If we ripped out stream-level sendmes, then as you say, we'd have to choose between "queue all the data for the stream, no matter how big it gets" and "tell the whole circuit to shut up".
I had a third one - which isn't quite practical: Just kill that stream. :-)
A possible compromise: A stream level XOFF/XON instead of SENDME would allow us to save the flow control bandwidth for properly flowing streams and still have a way to deal with stalled ones.
In another protocol I tended to piggyback the SENDME equivalent onto the data frames of the other direction, but here there is typically no data flowing in the other direction when you need to SENDME: Big downloads.
Another idea: Put the stream-level SENDMEs into the circuit-level ones. As far as I can see there should be sufficient space to do so, even for several streams at once. At that point, we could also change the SENDME to include a specific number of cells to additionally allow on each level, instead of the fixed 100/50.
Andreas