From 2fe649e7a5b211b10bb77da900eba5b7c11a07ff Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Tue, 17 Nov 2009 16:17:39 +0000 Subject: MFC 198990: Several years ago a feature was added to TCP that casued soreceive() to send an ACK right away if data was drained from a TCP socket that had previously advertised a zero-sized window. The current code requires the receive window to be exactly zero for this to kick in. If window scaling is enabled and the window is smaller than the scale, then the effective window that is advertised is zero. However, in that case the zero-sized window handling is not enabled because the window is not exactly zero. The fix changes the code to check the raw window value against zero. --- sys/netinet/tcp_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/netinet') diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index 99a319b104a0..c76d90563872 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -939,7 +939,7 @@ send: * to read more data then can be buffered prior to transmitting on * the connection. */ - if (recwin == 0) + if (th->th_win == 0) tp->t_flags |= TF_RXWIN0SENT; else tp->t_flags &= ~TF_RXWIN0SENT; -- cgit v1.3