diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-12-28 23:29:35 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-12-28 23:29:35 -0800 |
| commit | d574649899a29ce7eb96485c0a4c606f14f87011 (patch) | |
| tree | 0d6282c98fc458a4c24cc0b9f0f442bb2b958da3 /src/platform/windows/win_sockaddr.c | |
| parent | 945dbef5e8eb060654aec33851937f1e3325913b (diff) | |
| download | nng-d574649899a29ce7eb96485c0a4c606f14f87011.tar.gz nng-d574649899a29ce7eb96485c0a4c606f14f87011.tar.bz2 nng-d574649899a29ce7eb96485c0a4c606f14f87011.zip | |
resolver: use explicit resolver item provided by caller
This avoids the need to perform multiple allocations for dialing,
eliminating additional potential failures. Cancellation is also
made simpler and more perfectly robust.
Diffstat (limited to 'src/platform/windows/win_sockaddr.c')
| -rw-r--r-- | src/platform/windows/win_sockaddr.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/platform/windows/win_sockaddr.c b/src/platform/windows/win_sockaddr.c index 585096e9..60f6250d 100644 --- a/src/platform/windows/win_sockaddr.c +++ b/src/platform/windows/win_sockaddr.c @@ -47,19 +47,24 @@ nni_win_nn2sockaddr(SOCKADDR_STORAGE *ss, const nni_sockaddr *sa) } int -nni_win_sockaddr2nn(nni_sockaddr *sa, const SOCKADDR_STORAGE *ss) +nni_win_sockaddr2nn(nni_sockaddr *sa, const void *s, size_t sz) { - SOCKADDR_IN *sin; + SOCKADDR_IN *sin; + nng_sockaddr_in *nsin; #ifdef NNG_ENABLE_IPV6 - SOCKADDR_IN6 *sin6; + SOCKADDR_IN6 *sin6; + nng_sockaddr_in6 *nsin6; #endif - if ((ss == NULL) || (sa == NULL)) { + if ((s == NULL) || (sa == NULL)) { return (-1); } - switch (ss->ss_family) { + switch (((const SOCKADDR *) s)->sa_family) { case PF_INET: - sin = (void *) ss; + if (sz < sizeof(*sin)) { + return -1; + } + sin = (void *) s; sa->s_in.sa_family = NNG_AF_INET; sa->s_in.sa_port = sin->sin_port; sa->s_in.sa_addr = sin->sin_addr.s_addr; @@ -67,7 +72,10 @@ nni_win_sockaddr2nn(nni_sockaddr *sa, const SOCKADDR_STORAGE *ss) #ifdef NNG_ENABLE_IPV6 case PF_INET6: - sin6 = (void *) ss; + if (sz < sizeof(*sin6)) { + return (-1); + } + sin6 = (void *) s; sa->s_in6.sa_family = NNG_AF_INET6; sa->s_in6.sa_port = sin6->sin6_port; sa->s_in6.sa_scope = sin6->sin6_scope_id; |
