summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1996-04-15 03:46:33 +0000
committerdg <dg@FreeBSD.org>1996-04-15 03:46:33 +0000
commit64edb8a1f64fad69d52cb6ebb82c141c0b87fd0f (patch)
tree23e9180b2017e68c98a6dd8cf7c6a16c1f71c157 /sys/netinet
parent0604466becb0ff83c09af4b1a9fe1e9f9a73ec34 (diff)
downloadFreeBSD-src-64edb8a1f64fad69d52cb6ebb82c141c0b87fd0f.zip
FreeBSD-src-64edb8a1f64fad69d52cb6ebb82c141c0b87fd0f.tar.gz
Two fixes from Rich Stevens:
1) Set the persist timer to help time-out connections in the CLOSING state. 2) Honor the keep-alive timer in the CLOSING state. This fixes problems with connections getting "stuck" due to incompletion of the final connection shutdown which can be a BIG problem on busy WWW servers.
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/tcp_output.c13
-rw-r--r--sys/netinet/tcp_timer.c4
2 files changed, 10 insertions, 7 deletions
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index adfe5a0..f4d03f1 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)tcp_output.c 8.4 (Berkeley) 5/24/95
- * $Id: tcp_output.c,v 1.18 1996/01/17 09:35:23 olah Exp $
+ * $Id: tcp_output.c,v 1.19 1996/03/11 15:13:32 davidg Exp $
*/
#include <sys/param.h>
@@ -186,15 +186,18 @@ again:
* but we haven't been called to retransmit,
* len will be -1. Otherwise, window shrank
* after we sent into it. If window shrank to 0,
- * cancel pending retransmit and pull snd_nxt
- * back to (closed) window. We will enter persist
- * state below. If the window didn't close completely,
- * just wait for an ACK.
+ * cancel pending retransmit, pull snd_nxt back
+ * to (closed) window, and set the persist timer
+ * if it isn't already going. If the window didn't
+ * close completely, just wait for an ACK.
*/
len = 0;
if (win == 0) {
tp->t_timer[TCPT_REXMT] = 0;
+ tp->t_rxtshift = 0;
tp->snd_nxt = tp->snd_una;
+ if (tp->t_timer[TCPT_PERSIST] == 0)
+ tcp_setpersist(tp);
}
}
if (len > tp->t_maxseg) {
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c
index f9c89b7..776d076 100644
--- a/sys/netinet/tcp_timer.c
+++ b/sys/netinet/tcp_timer.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)tcp_timer.c 8.2 (Berkeley) 5/24/95
- * $Id: tcp_timer.c,v 1.14 1996/03/11 15:13:35 davidg Exp $
+ * $Id: tcp_timer.c,v 1.15 1996/04/04 11:17:04 phk Exp $
*/
#ifndef TUBA_INCLUDE
@@ -320,7 +320,7 @@ tcp_timers(tp, timer)
goto dropit;
if ((always_keepalive ||
tp->t_inpcb->inp_socket->so_options & SO_KEEPALIVE) &&
- tp->t_state <= TCPS_CLOSE_WAIT) {
+ tp->t_state <= TCPS_CLOSING) {
if (tp->t_idle >= tcp_keepidle + tcp_maxidle)
goto dropit;
/*
OpenPOWER on IntegriCloud