From 81165e4880b8b0adf3773b2ada58a9f27471e8ec Mon Sep 17 00:00:00 2001 From: Andras Olah Date: Wed, 17 Jan 1996 09:35:23 +0000 Subject: [PATCH] Be more conservative when T/TCP extensions are disabled. In particular, do not send data and/or FIN on SYN segments in this case. --- sys/netinet/tcp_output.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index 52dd4dfc375d..c080b05eabe2 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.16 1995/11/03 22:08:08 olah Exp $ + * $Id: tcp_output.c,v 1.17 1995/12/05 17:46:35 wollman Exp $ */ #include @@ -167,6 +167,19 @@ tcp_output(tp) return 0; } + /* + * Be careful not to send data and/or FIN on SYN segments + * in cases when no CC option will be sent. + * This measure is needed to prevent interoperability problems + * with not fully conformant TCP implementations. + */ + if ((flags & TH_SYN) && + ((tp->t_flags & TF_NOOPT) || !(tp->t_flags & TF_REQ_CC) || + ((flags & TH_ACK) && !(tp->t_flags & TF_RCVD_CC)))) { + len = 0; + flags &= ~TH_FIN; + } + if (len < 0) { /* * If FIN has been sent but not acked,