aboutsummaryrefslogtreecommitdiff
path: root/src/platform/windows/win_sockaddr.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-28 23:29:35 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-28 23:29:35 -0800
commitd574649899a29ce7eb96485c0a4c606f14f87011 (patch)
tree0d6282c98fc458a4c24cc0b9f0f442bb2b958da3 /src/platform/windows/win_sockaddr.c
parent945dbef5e8eb060654aec33851937f1e3325913b (diff)
downloadnng-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.c22
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;