summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludovic.courtes@inria.fr>2017-06-22 10:56:18 +0200
committerLudovic Courtès <ludo@gnu.org>2017-06-22 10:59:07 +0200
commit6efb578a1412bae959dd6b1755e2c333eb4e4cd8 (patch)
tree78528ca55abbbacf633731e0b93640cc462a44e6
parent1071f781d97509347144754b3248581cf7c6c1d5 (diff)
downloadguix-6efb578a1412bae959dd6b1755e2c333eb4e4cd8.tar.gz
daemon: Set TCP_NODELAY and TCP_QUICKACK on remote sockets.
* nix/nix-daemon/nix-daemon.cc (acceptConnection): Set TCP_NODELAY and
TCP_QUICKACK on REMOTE.
-rw-r--r--nix/nix-daemon/nix-daemon.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index 3d8e909901..b20225b3b0 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -19,6 +19,9 @@
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
 #include <fcntl.h>
 #include <errno.h>
 #include <pwd.h>
@@ -839,6 +842,21 @@ static void acceptConnection(int fdSocket)
 
 	closeOnExec(remote);
 
+	{
+	  int enabled = 1;
+
+	  /* If we're on a TCP connection, disable Nagle's algorithm so that
+	     data is sent as soon as possible.  */
+	  (void) setsockopt(remote, SOL_TCP, TCP_NODELAY,
+			    &enabled, sizeof enabled);
+
+#if defined(TCP_QUICKACK)
+	  /* Enable TCP quick-ack if applicable; this might help a little.  */
+	  (void) setsockopt(remote, SOL_TCP, TCP_QUICKACK,
+			    &enabled, sizeof enabled);
+#endif
+	}
+
 	pid_t clientPid = -1;
 	bool trusted = false;