summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Sigurdhsson <Sigurdhsson@gmail.com>2017-05-11 19:24:09 +0200
committerGarrett D'Amore <garrett@damore.org>2017-10-12 18:33:45 -0700
commitb6d68f8ae855e8233c7fa9b92a06a84236e324ed (patch)
treee19e1f5daccd2118444c047be4d0d34d74081ee4 /src
parentec465f0b3efdd9d08c00fbbecc1e69537373e5a5 (diff)
downloadnanomsg-b6d68f8ae855e8233c7fa9b92a06a84236e324ed.tar.gz
fixes #118 NN_TCP_NODELAY doesn't cause TCP_NODELAY to be set
Diffstat (limited to 'src')
-rw-r--r--src/transports/tcp/atcp.c14
-rw-r--r--src/transports/tcp/ctcp.c5
2 files changed, 19 insertions, 0 deletions
diff --git a/src/transports/tcp/atcp.c b/src/transports/tcp/atcp.c
index 60d75ef..2f94331 100644
--- a/src/transports/tcp/atcp.c
+++ b/src/transports/tcp/atcp.c
@@ -23,10 +23,19 @@
#include "atcp.h"
+#include "../../tcp.h"
+
#include "../../utils/err.h"
#include "../../utils/cont.h"
#include "../../utils/attr.h"
+#if defined NN_HAVE_WINDOWS
+#include "../../utils/win.h"
+#else
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#endif
+
#define NN_ATCP_STATE_IDLE 1
#define NN_ATCP_STATE_ACCEPTING 2
#define NN_ATCP_STATE_ACTIVE 3
@@ -192,6 +201,11 @@ static void nn_atcp_handler (struct nn_fsm *self, int src, int type,
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&atcp->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
+ sz = sizeof (val);
+ nn_ep_getopt (atcp->ep, NN_TCP, NN_TCP_NODELAY, &val, &sz);
+ nn_assert (sz == sizeof (val));
+ nn_usock_setsockopt (&atcp->usock, IPPROTO_TCP, TCP_NODELAY,
+ &val, sizeof (val));
/* Return ownership of the listening socket to the parent. */
nn_usock_swap_owner (atcp->listener, &atcp->listener_owner);
diff --git a/src/transports/tcp/ctcp.c b/src/transports/tcp/ctcp.c
index fc9bc90..b74b5a0 100644
--- a/src/transports/tcp/ctcp.c
+++ b/src/transports/tcp/ctcp.c
@@ -598,6 +598,11 @@ static void nn_ctcp_start_connecting (struct nn_ctcp *self,
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
+ sz = sizeof (val);
+ nn_ep_getopt (self->ep, NN_TCP, NN_TCP_NODELAY, &val, &sz);
+ nn_assert (sz == sizeof (val));
+ nn_usock_setsockopt (&self->usock, IPPROTO_TCP, TCP_NODELAY,
+ &val, sizeof (val));
/* Bind the socket to the local network interface. */
rc = nn_usock_bind (&self->usock, (struct sockaddr*) &local, locallen);