diff options
author | Simon Sigurdhsson <Sigurdhsson@gmail.com> | 2017-05-11 19:24:09 +0200 |
---|---|---|
committer | Garrett D'Amore <garrett@damore.org> | 2017-10-12 18:33:45 -0700 |
commit | b6d68f8ae855e8233c7fa9b92a06a84236e324ed (patch) | |
tree | e19e1f5daccd2118444c047be4d0d34d74081ee4 /src | |
parent | ec465f0b3efdd9d08c00fbbecc1e69537373e5a5 (diff) | |
download | nanomsg-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.c | 14 | ||||
-rw-r--r-- | src/transports/tcp/ctcp.c | 5 |
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); |