summaryrefslogtreecommitdiff
path: root/src/tcp_listener.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2011-07-28 13:19:55 +0200
committerMartin Sustrik <sustrik@250bpm.com>2011-07-28 13:19:55 +0200
commit5ac63140b01fed145fa41f613308e134420920ab (patch)
treee51f1dcd4c97ffb720c909f81271751d5776d191 /src/tcp_listener.cpp
parent6e987428d49558a8a7b08795bcc429f720bb3874 (diff)
Implementations of TCP and IPC transports separated
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/tcp_listener.cpp')
-rw-r--r--src/tcp_listener.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp
index d334768..360be8c 100644
--- a/src/tcp_listener.cpp
+++ b/src/tcp_listener.cpp
@@ -87,6 +87,26 @@ void zmq::tcp_listener_t::in_event ()
if (fd == retired_fd)
return;
+ // Disable Nagle's algorithm. We are doing data batching on 0MQ level,
+ // so using Nagle wouldn't improve throughput in anyway, but it would
+ // hurt latency.
+ int nodelay = 1;
+ int rc = setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (char*) &nodelay,
+ sizeof (int));
+#ifdef ZMQ_HAVE_WINDOWS
+ wsa_assert (rc != SOCKET_ERROR);
+#else
+ errno_assert (rc == 0);
+#endif
+
+#ifdef ZMQ_HAVE_OPENVMS
+ // Disable delayed acknowledgements as they hurt latency is serious manner.
+ int nodelack = 1;
+ rc = setsockopt (fd, IPPROTO_TCP, TCP_NODELACK, (char*) &nodelack,
+ sizeof (int));
+ errno_assert (rc != SOCKET_ERROR);
+#endif
+
// Create the engine object for this connection.
tcp_engine_t *engine = new (std::nothrow) tcp_engine_t (fd, options);
alloc_assert (engine);