Thread (24 messages) flat view 24 messages, 4 authors, 2017-03-28

Re: [PATCH net-next 2/2] sctp: add support for MSG_MORE

From: Xin Long <lucien.xin@gmail.com>
Date: 2017-03-24 16:09:11
Also in: linux-sctp

On Fri, Mar 24, 2017 at 12:42 AM, Marcelo Ricardo Leitner
[off-list ref] wrote:
On Thu, Mar 23, 2017 at 12:35:46PM +0800, Xin Long wrote:
quoted
On Thu, Mar 23, 2017 at 1:33 AM, Marcelo Ricardo Leitner
[off-list ref] wrote:
quoted
On Wed, Mar 22, 2017 at 02:07:37PM +0000, David Laight wrote:
quoted
Regardless of the MSG_MORE flags associated with any specific send()
request there will always be protocol effects (like retransmissions
or flow control 'on') that will generate different 'chunking'.
Yes, those are the ones that may lead to some confusion on how it
actually works, and mangling them is not really desired for the
sideeffects that it might have.

Sooner or later we could have bug reports like "hey this chunk shouldn't
have been packed with that." if we stick with the initial proposition,
while with David's view, we are only promising to not send packets with
a single chunk and as long as the application send more data fast enough.

David, are we on the same page now? ;-)

Xin, what do you think?
If we insist that MSG_MORE means not to send  ANY data, I compromise.
does ANY include retransmission DATA? should MSG_MORE block
retransmission ?
That's not really what he meant by that, I think. That "ANY" in there is
a way to refer to the entire buf and not that msg sendmsg is sending.
Later I explained what I got from his explanation, which should be more
like:
"If MSG_MORE was used, and there are no packets in flight, do not send a
packet right away because the application is going to send more data."
Would have to handle the (Not-)Nagle situation too:
"If not using Nagle and using MSG_MORE, try to not generate a packet
right away." (because this may send packets with a single chunk even if
in_flight != 0)
In both cases, if the flush is generated by other triggers, it's okay.

Because if there are chunks already queued, they will be sent as soon as
in_flight reaches 0 or some other break is lifted (flow control).
Holding the chunk that was queued with MSG_MORE and sending a partial
packet in this case because of MSG_MORE is not good, it's possibly not
saving anything.
Makes sence, thanks for making this clear, will post a new fix.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help