summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp
diff options
context:
space:
mode:
authorgeorges <none@none>2006-12-15 04:09:14 -0800
committergeorges <none@none>2006-12-15 04:09:14 -0800
commita644aa6f4739bce6d579237b166673ef07180ebf (patch)
tree25761babf62f6c2f0639f98b9314a7447e65c22f /usr/src/uts/common/inet/tcp
parent9d9461f978f27132308c8a01d284c8f75bf4439d (diff)
downloadillumos-joyent-a644aa6f4739bce6d579237b166673ef07180ebf.tar.gz
6401916 Retransmission on closing connections is not handled properly.
Diffstat (limited to 'usr/src/uts/common/inet/tcp')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp.c b/usr/src/uts/common/inet/tcp/tcp.c
index 6e7fa81d17..d19faf593c 100644
--- a/usr/src/uts/common/inet/tcp/tcp.c
+++ b/usr/src/uts/common/inet/tcp/tcp.c
@@ -11759,7 +11759,17 @@ tcp_rput_common(tcp_t *tcp, mblk_t *mp)
freemsg(mp);
return;
default:
- break;
+ /*
+ * tcp_icmp_err() will process the M_CTL packets.
+ * Non-ICMP packets, if any, will be discarded in
+ * tcp_icmp_err(). We will process the ICMP packet
+ * even if we are TCP_IS_DETACHED_NONEAGER as the
+ * incoming ICMP packet may result in changing
+ * the tcp_mss, which we would need if we have
+ * packets to retransmit.
+ */
+ tcp_icmp_error(tcp, mp);
+ return;
}
}
@@ -15717,17 +15727,13 @@ tcp_rput_other(tcp_t *tcp, mblk_t *mp)
break;
}
break;
- case M_CTL:
- /*
- * ICMP messages.
- */
- tcp_icmp_error(tcp, mp);
- return;
case M_FLUSH:
if (*rptr & FLUSHR)
flushq(q, FLUSHDATA);
break;
default:
+ /* M_CTL will be directly sent to tcp_icmp_error() */
+ ASSERT(DB_TYPE(mp) != M_CTL);
break;
}
/*