diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1516,9 +1516,13 @@
 		tcp_account_for_send(tp, len, (tp->snd_nxt != tp->snd_max), 0, hw_tls);
 	/*
 	 * In transmit state, time the transmission and arrange for
-	 * the retransmit.  In persist state, just set snd_max.
+	 * the retransmit.  In persist state, just set snd_max.  In a closed
+	 * state just return.
 	 */
-	if ((tp->t_flags & TF_FORCEDATA) == 0 ||
+	if (flags & TH_RST) {
+		TCPSTAT_INC(tcps_sndtotal);
+		return (0);
+	} else if ((tp->t_flags & TF_FORCEDATA) == 0 ||
 	    !tcp_timer_active(tp, TT_PERSIST)) {
 		tcp_seq startseq = tp->snd_nxt;