svn commit: r223049 - head/sys/netinet

John Baldwin jhb at FreeBSD.org
Mon Jun 13 15:38:31 UTC 2011


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);


More information about the svn-src-all mailing list