diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-03-07 17:06:16 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-03-07 17:12:53 -0800 |
| commit | 8a20acfa34e1eedf34254354b8a219bd8fbca2ed (patch) | |
| tree | 66d8860b7576ebd6f1fa24c9042e929fb7848c93 /src/platform/posix | |
| parent | 52ee317a007ad973a091b9cbd69e1b8ef29904ee (diff) | |
| download | nng-8a20acfa34e1eedf34254354b8a219bd8fbca2ed.tar.gz nng-8a20acfa34e1eedf34254354b8a219bd8fbca2ed.tar.bz2 nng-8a20acfa34e1eedf34254354b8a219bd8fbca2ed.zip | |
fixes #269 nngcat unreliable with ZeroTier transport
This does a few things. First it closes a case where a dropped
message could prevent subsequent connection attempts from getting through.
Second, it changes the rate at which we retry, and the timeout, to be
a lot more aggressive when attempting to establish a connection. We
retry every 500 ms, for up to 2 minutes, before giving up. This gives
a lot more resilience in the face of message loss that is typical of
ZeroTier in some environments when first establishing communication.
Third, makes the values for the connection attempts *tunable*, so
that applications can adjust for different deployment scenarios.
Fourth, it includes the ability to get the UDP socket name. This was
needed during some debug, and may be useful for a real UDP transport
later, so we're keeping it.
Finally, we added documentation for the above items.
Diffstat (limited to 'src/platform/posix')
| -rw-r--r-- | src/platform/posix/posix_udp.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/platform/posix/posix_udp.c b/src/platform/posix/posix_udp.c index 61546667..8a402acc 100644 --- a/src/platform/posix/posix_udp.c +++ b/src/platform/posix/posix_udp.c @@ -306,4 +306,19 @@ nni_plat_udp_send(nni_plat_udp *udp, nni_aio *aio) nni_mtx_unlock(&udp->udp_mtx); } +int +nni_plat_udp_sockname(nni_plat_udp *udp, nni_sockaddr *sa) +{ + struct sockaddr_storage ss; + socklen_t sz; + int rv; + + sz = sizeof(ss); + if ((rv = getsockname(udp->udp_fd, (struct sockaddr *) &ss, &sz)) < + 0) { + return (nni_plat_errno(errno)); + } + return (nni_posix_sockaddr2nn(sa, &ss)); +} + #endif // NNG_PLATFORM_POSIX |
