Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Jun 2011 15:38:31 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r223049 - head/sys/netinet
Message-ID:  <201106131538.p5DFcVWB088346@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Mon Jun 13 15:38:31 2011
New Revision: 223049
URL: http://svn.freebsd.org/changeset/base/223049

Log:
  Advance the advertised window (rcv_adv) to the currently received data
  (rcv_nxt) if we advertising a zero window.  This can be true when ACK'ing
  a window probe whose one byte payload was accepted rather than dropped
  because the socket's receive buffer was not completely full, but the
  remaining space was smaller than the window scale.
  
  This ensures that window probe ACKs satisfy the assumption made in r221346
  and closes a window where rcv_nxt could be greater than rcv_adv.
  
  Tested by:	trasz, pho, trociny
  Reviewed by:	silby
  MFC after:	1 week

Modified:
  head/sys/netinet/tcp_output.c

Modified: head/sys/netinet/tcp_output.c
==============================================================================
--- head/sys/netinet/tcp_output.c	Mon Jun 13 13:40:12 2011	(r223048)
+++ head/sys/netinet/tcp_output.c	Mon Jun 13 15:38:31 2011	(r223049)
@@ -1331,7 +1331,7 @@ out:
 	 * then remember the size of the advertised window.
 	 * Any pending ACK has now been sent.
 	 */
-	if (recwin > 0 && SEQ_GT(tp->rcv_nxt + recwin, tp->rcv_adv))
+	if (recwin >= 0 && SEQ_GT(tp->rcv_nxt + recwin, tp->rcv_adv))
 		tp->rcv_adv = tp->rcv_nxt + recwin;
 	tp->last_ack_sent = tp->rcv_nxt;
 	tp->t_flags &= ~(TF_ACKNOW | TF_DELACK);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106131538.p5DFcVWB088346>