diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-05-21 15:51:08 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-05-21 21:27:16 -0700 |
| commit | d0cf8ce6f43daf6882037dbdcdaa7f2169dd1e6a (patch) | |
| tree | b6201f5f27c556b0a8102669605220fffccd4528 /src/core | |
| parent | 45692d50c33f1fbc45554a5b82281046c4b3621a (diff) | |
| download | nng-d0cf8ce6f43daf6882037dbdcdaa7f2169dd1e6a.tar.gz nng-d0cf8ce6f43daf6882037dbdcdaa7f2169dd1e6a.tar.bz2 nng-d0cf8ce6f43daf6882037dbdcdaa7f2169dd1e6a.zip | |
fixes #469 SO_REUSEADDR should be enabled
fixes #468 TCP nodelay and keepalive should start usable
fixes #467 NN_RCVMAXSZ option does not work (compat)
fixes #465 Support NN_OPT_TCPNODELAY (compat)
This is a rather larger change set than I'd like, but when adding
support for legacy TCP keepalive, I found a number if issues using
the legacy TCP test (which we are introducing with this commit.)
This fixes the concerns that are relevant and addressible.
We have elected not to try to support to local address binding at this
time, and the IPv6 test case in the old code was wrong, so changes
relevant to that are commented out.
I've also updated the nng_compat manual page to reflect additional
caveats that folks should be aware of, including the previously
undocumented caveat around the NN_SNDBUF and NN_RCVBUF options.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/socket.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/socket.c b/src/core/socket.c index 3a209441..faca1b06 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -532,6 +532,7 @@ nni_sock_create(nni_sock **sp, const nni_proto *proto) { int rv; nni_sock *s; + bool on; if ((s = NNI_ALLOC_STRUCT(s)) == NULL) { return (NNG_ENOMEM); @@ -587,6 +588,16 @@ nni_sock_create(nni_sock **sp, const nni_proto *proto) return (rv); } + // These we *attempt* to call so that we are likely to have initial + // values loaded. They should not fail, but if they do we don't + // worry about it. + on = true; + (void) nni_sock_setopt( + s, NNG_OPT_TCP_NODELAY, &on, sizeof(on), NNI_TYPE_BOOL); + on = false; + (void) nni_sock_setopt( + s, NNG_OPT_TCP_KEEPALIVE, &on, sizeof(on), NNI_TYPE_BOOL); + if (s->s_sock_ops.sock_filter != NULL) { nni_msgq_set_filter( s->s_urq, s->s_sock_ops.sock_filter, s->s_data); |
