diff options
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); |