- stevesk@cvs.openbsd.org 2002/02/24 19:59:42
     [channels.c misc.c]
     disable Nagle in connect_to() and channel_post_port_listener() (port
     forwarding endpoints).  the intention is to preserve the on-the-wire
     appearance to applications at either end; the applications can then
     enable TCP_NODELAY according to their requirements. ok markus@
diff --git a/ChangeLog b/ChangeLog
index 784ddeb..8e1b467 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,6 +42,12 @@
      [auth2.c authfd.c authfd.h authfile.c kexdh.c kexgex.c key.c key.h 
       ssh-dss.c ssh-dss.h ssh-keygen.c ssh-rsa.c ssh-rsa.h sshconnect2.c]
      signed vs. unsigned: make size arguments u_int, ok stevesk@
+   - stevesk@cvs.openbsd.org 2002/02/24 19:59:42
+     [channels.c misc.c]
+     disable Nagle in connect_to() and channel_post_port_listener() (port
+     forwarding endpoints).  the intention is to preserve the on-the-wire
+     appearance to applications at either end; the applications can then
+     enable TCP_NODELAY according to their requirements. ok markus@
 
 20020225
  - (bal) Last AIX patch.  Moved aix_usrinfo() outside of do_setuserconext()
@@ -7715,4 +7721,4 @@
  - Wrote replacements for strlcpy and mkdtemp
  - Released 1.0pre1
 
-$Id: ChangeLog,v 1.1885 2002/02/26 18:09:42 mouring Exp $
+$Id: ChangeLog,v 1.1886 2002/02/26 18:12:51 mouring Exp $
diff --git a/channels.c b/channels.c
index 50d6f16..325f278 100644
--- a/channels.c
+++ b/channels.c
@@ -39,7 +39,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: channels.c,v 1.168 2002/02/14 23:27:59 markus Exp $");
+RCSID("$OpenBSD: channels.c,v 1.169 2002/02/24 19:59:42 stevesk Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -1116,6 +1116,7 @@
 			error("accept: %.100s", strerror(errno));
 			return;
 		}
+		set_nodelay(newsock);
 		nc = channel_new(rtype,
 		    nextstate, newsock, newsock, -1,
 		    c->local_window_max, c->local_maxpacket,
@@ -2270,6 +2271,7 @@
 		return -1;
 	}
 	/* success */
+	set_nodelay(sock);
 	return sock;
 }
 
diff --git a/misc.c b/misc.c
index fbdf408..d34423f 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: misc.c,v 1.15 2002/01/24 21:09:25 stevesk Exp $	*/
+/*	$OpenBSD: misc.c,v 1.16 2002/02/24 19:59:42 stevesk Exp $	*/
 
 /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
@@ -25,7 +25,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: misc.c,v 1.15 2002/01/24 21:09:25 stevesk Exp $");
+RCSID("$OpenBSD: misc.c,v 1.16 2002/02/24 19:59:42 stevesk Exp $");
 
 #include "misc.h"
 #include "log.h"
@@ -96,10 +96,20 @@
 void
 set_nodelay(int fd)
 {
-	int on = 1;
+	int opt, optlen;
 
+	optlen = sizeof opt;
+	if (getsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &opt, &optlen) == -1) {
+		error("getsockopt TCP_NODELAY: %.100s", strerror(errno));
+		return;
+	}
+	if (opt == 1) {
+		debug2("fd %d is TCP_NODELAY", fd);
+		return;
+	}
+	opt = 1;
 	debug("fd %d setting TCP_NODELAY", fd);
-	if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof on) == -1)
+	if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof opt) == -1)
 		error("setsockopt TCP_NODELAY: %.100s", strerror(errno));
 }