When turning off TCP_NOPUSH, call tcp_output to immediately flush

out any data pending in the buffer.

Submitted by: Tony Finch <dot@dotat.at>
This commit is contained in:
Jonathan Lemon 2001-02-02 18:48:25 +00:00
parent ecde9a6dae
commit 007581c0d8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=71937

View File

@ -895,7 +895,6 @@ tcp_ctloutput(so, sopt)
switch (sopt->sopt_name) {
case TCP_NODELAY:
case TCP_NOOPT:
case TCP_NOPUSH:
error = sooptcopyin(sopt, &optval, sizeof optval,
sizeof optval);
if (error)
@ -908,9 +907,6 @@ tcp_ctloutput(so, sopt)
case TCP_NOOPT:
opt = TF_NOOPT;
break;
case TCP_NOPUSH:
opt = TF_NOPUSH;
break;
default:
opt = 0; /* dead code to fool gcc */
break;
@ -922,6 +918,20 @@ tcp_ctloutput(so, sopt)
tp->t_flags &= ~opt;
break;
case TCP_NOPUSH:
error = sooptcopyin(sopt, &optval, sizeof optval,
sizeof optval);
if (error)
break;
if (optval)
tp->t_flags |= TF_NOPUSH;
else {
tp->t_flags &= ~TF_NOPUSH;
error = tcp_output(tp);
}
break;
case TCP_MAXSEG:
error = sooptcopyin(sopt, &optval, sizeof optval,
sizeof optval);