I'm very pleased to announce the release of our new website and documentation using the new toolchain with Hugo and AsciiDoctor. To get more information about the new toolchain please read the FreeBSD Documentation Project Primer[1], Hugo docs[2] and AsciiDoctor docs[3]. Acknowledgment: Benedict Reuschling <bcr@> Glen Barber <gjb@> Hiroki Sato <hrs@> Li-Wen Hsu <lwhsu@> Sean Chittenden <seanc@> The FreeBSD Foundation [1] https://docs.FreeBSD.org/en/books/fdp-primer/ [2] https://gohugo.io/documentation/ [3] https://docs.asciidoctor.org/home/ Approved by: doceng, core
31 lines
1.1 KiB
Diff
31 lines
1.1 KiB
Diff
Index: sys/netinet/tcp_output.c
|
|
===================================================================
|
|
--- sys/netinet/tcp_output.c (revision 285435)
|
|
+++ sys/netinet/tcp_output.c (working copy)
|
|
@@ -400,7 +400,7 @@ after_sack_rexmit:
|
|
flags &= ~TH_FIN;
|
|
}
|
|
|
|
- if (len < 0) {
|
|
+ if (len <= 0) {
|
|
/*
|
|
* If FIN has been sent but not acked,
|
|
* but we haven't been called to retransmit,
|
|
@@ -410,9 +410,16 @@ after_sack_rexmit:
|
|
* 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.
|
|
+ *
|
|
+ * We also do a general check here to ensure that
|
|
+ * we will set the persist timer when we have data
|
|
+ * to send, but a 0-byte window. This makes sure
|
|
+ * the persist timer is set even if the packet
|
|
+ * hits one of the "goto send" lines below.
|
|
*/
|
|
len = 0;
|
|
- if (sendwin == 0) {
|
|
+ if ((sendwin == 0) && (TCPS_HAVEESTABLISHED(tp->t_state)) &&
|
|
+ (off < (int) so->so_snd.sb_cc)) {
|
|
tcp_timer_activate(tp, TT_REXMT, 0);
|
|
tp->t_rxtshift = 0;
|
|
tp->snd_nxt = tp->snd_una;
|