summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2002-02-26 19:12:51 +0100
committerBen Lindstrom <mouring@eviladmin.org>2002-02-26 19:12:51 +0100
commit1ebd7a5342a91f8aaa3eabd6c86c7afe8d663cd6 (patch)
tree661c0e5ccf8ce7a9b599430d3e160eaa937916ee
parent - markus@cvs.openbsd.org 2002/02/24 19:14:59 (diff)
downloadopenssh-1ebd7a5342a91f8aaa3eabd6c86c7afe8d663cd6.tar.xz
openssh-1ebd7a5342a91f8aaa3eabd6c86c7afe8d663cd6.zip
- 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@
-rw-r--r--ChangeLog8
-rw-r--r--channels.c4
-rw-r--r--misc.c18
3 files changed, 24 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 784ddeb8f..8e1b4677d 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 50d6f16ad..325f278f0 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 @@ channel_post_port_listener(Channel *c, fd_set * readset, fd_set * writeset)
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 @@ connect_to(const char *host, u_short port)
return -1;
}
/* success */
+ set_nodelay(sock);
return sock;
}
diff --git a/misc.c b/misc.c
index fbdf408e8..d34423f64 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 @@ unset_nonblock(int fd)
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));
}