From be13c2e8845423cec17af429fc4e16a5d9749e47 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sun, 26 Oct 2025 10:54:58 -0700 Subject: Replace nng_pipe_get_addr, nng_stream_get_addr, and the NNG_OPT_REMADDR option. More direct access methods are provided instead. This results in much lower friction when using, and is a step on the path to removing NNG_OPT_LOCADDR as well. We need to figure a solution for NNG_OPT_LOCADDR for dialers; for listeners there is little use in it either, and it will be removed. (Dialers will probably get a new NNG_OPT_BIND_IP option.) --- src/platform/ipc_stream_test.c | 8 ++--- src/platform/posix/posix_ipcdial.c | 12 -------- src/platform/posix/posix_ipclisten.c | 11 ------- src/platform/posix/posix_tcplisten.c | 59 ++++++++++++------------------------ src/platform/tcp_stream_test.c | 39 +++++++++--------------- src/platform/windows/win_ipcdial.c | 12 -------- src/platform/windows/win_ipclisten.c | 11 ------- src/platform/windows/win_tcplisten.c | 4 --- 8 files changed, 39 insertions(+), 117 deletions(-) (limited to 'src/platform') diff --git a/src/platform/ipc_stream_test.c b/src/platform/ipc_stream_test.c index fb3bc493..45c78d23 100644 --- a/src/platform/ipc_stream_test.c +++ b/src/platform/ipc_stream_test.c @@ -29,9 +29,9 @@ test_ipc_stream(void) nng_aio *aio1; nng_aio *aio2; nng_iov iov; - nng_sockaddr sa2; char buf1[5]; char buf2[5]; + const nng_sockaddr *sap; NUTS_ADDR(url, "ipc"); NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); @@ -85,9 +85,9 @@ test_ipc_stream(void) NUTS_TRUE(memcmp(buf1, buf2, 5) == 0); - NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); - NUTS_TRUE(sa2.s_ipc.sa_family == NNG_AF_IPC); - NUTS_MATCH(sa2.s_ipc.sa_path, url + strlen("ipc://")); + sap = nng_stream_self_addr(c2); + NUTS_TRUE(sap->s_ipc.sa_family == NNG_AF_IPC); + NUTS_MATCH(sap->s_ipc.sa_path, url + strlen("ipc://")); nng_aio_free(aio1); nng_aio_free(aio2); diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c index a570bc4f..d042f45c 100644 --- a/src/platform/posix/posix_ipcdial.c +++ b/src/platform/posix/posix_ipcdial.c @@ -249,14 +249,6 @@ error: nni_aio_finish_error(aio, rv); } -static nng_err -ipc_dialer_get_remaddr(void *arg, void *buf, size_t *szp, nni_type t) -{ - ipc_dialer *d = arg; - - return (nni_copyout_sockaddr(&d->sa, buf, szp, t)); -} - #ifdef NNG_TEST_LIB static nng_err ipc_dialer_set_test_no_connect( @@ -274,10 +266,6 @@ ipc_dialer_set_test_no_connect( #endif static const nni_option ipc_dialer_options[] = { - { - .o_name = NNG_OPT_REMADDR, - .o_get = ipc_dialer_get_remaddr, - }, #ifdef NNG_TEST_LIB { .o_name = "test-no-connect", diff --git a/src/platform/posix/posix_ipclisten.c b/src/platform/posix/posix_ipclisten.c index 6254bf81..7587b4c6 100644 --- a/src/platform/posix/posix_ipclisten.c +++ b/src/platform/posix/posix_ipclisten.c @@ -216,13 +216,6 @@ ipc_remove_stale(const char *path) return (NNG_OK); } -static nng_err -ipc_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t) -{ - ipc_listener *l = arg; - return (nni_copyout_sockaddr(&l->sa, buf, szp, t)); -} - static nng_err ipc_listener_set_perms(void *arg, const void *buf, size_t sz, nni_type t) { @@ -307,10 +300,6 @@ ipc_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t) #endif static const nni_option ipc_listener_options[] = { - { - .o_name = NNG_OPT_LOCADDR, - .o_get = ipc_listener_get_addr, - }, { .o_name = NNG_OPT_IPC_PERMISSIONS, .o_set = ipc_listener_set_perms, diff --git a/src/platform/posix/posix_tcplisten.c b/src/platform/posix/posix_tcplisten.c index b158508c..9ad550b2 100644 --- a/src/platform/posix/posix_tcplisten.c +++ b/src/platform/posix/posix_tcplisten.c @@ -306,25 +306,6 @@ tcp_listener_accept(void *arg, nni_aio *aio) nni_mtx_unlock(&l->mtx); } -static nng_err -tcp_listener_get_locaddr(void *arg, void *buf, size_t *szp, nni_type t) -{ - tcp_listener *l = arg; - nng_sockaddr sa; - nni_mtx_lock(&l->mtx); - if (l->started) { - struct sockaddr_storage ss; - socklen_t len = sizeof(ss); - (void) getsockname( - nni_posix_pfd_fd(&l->pfd), (void *) &ss, &len); - (void) nni_posix_sockaddr2nn(&sa, &ss, len); - } else { - sa.s_family = NNG_AF_UNSPEC; - } - nni_mtx_unlock(&l->mtx); - return (nni_copyout_sockaddr(&sa, buf, szp, t)); -} - static nng_err tcp_listener_set_nodelay(void *arg, const void *buf, size_t sz, nni_type t) { @@ -384,29 +365,33 @@ tcp_listener_get_keepalive(void *arg, void *buf, size_t *szp, nni_type t) static nng_err tcp_listener_get_port(void *arg, void *buf, size_t *szp, nni_type t) { - tcp_listener *l = arg; - nng_sockaddr sa; - size_t sz; - int port; - uint8_t *paddr; + tcp_listener *l = arg; + int port; + struct sockaddr_storage ss; + socklen_t len = sizeof(ss); - sz = sizeof(sa); - (void) tcp_listener_get_locaddr(l, &sa, &sz, NNI_TYPE_SOCKADDR); + nni_mtx_lock(&l->mtx); + if (!l->started) { + nni_mtx_unlock(&l->mtx); + return (NNG_ESTATE); + } + (void) getsockname(nni_posix_pfd_fd(&l->pfd), (void *) &ss, &len); + nni_mtx_unlock(&l->mtx); - switch (sa.s_family) { - case NNG_AF_INET: - paddr = (void *) &sa.s_in.sa_port; + switch (ss.ss_family) { + case AF_INET: + port = + htons(((struct sockaddr_in *) ((void *) (&ss)))->sin_port); break; - - case NNG_AF_INET6: - paddr = (void *) &sa.s_in6.sa_port; + case AF_INET6: + port = htons( + ((struct sockaddr_in6 *) ((void *) (&ss)))->sin6_port); break; - default: - return (NNG_ESTATE); + port = 0; + break; } - NNI_GET16(paddr, port); return (nni_copyout_int(port, buf, szp, t)); } @@ -469,10 +454,6 @@ tcp_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t) #endif static const nni_option tcp_listener_options[] = { - { - .o_name = NNG_OPT_LOCADDR, - .o_get = tcp_listener_get_locaddr, - }, { .o_name = NNG_OPT_TCP_NODELAY, .o_set = tcp_listener_set_nodelay, diff --git a/src/platform/tcp_stream_test.c b/src/platform/tcp_stream_test.c index a0943e6c..3dffed82 100644 --- a/src/platform/tcp_stream_test.c +++ b/src/platform/tcp_stream_test.c @@ -18,10 +18,8 @@ void test_tcp_stream(void) { - nng_stream_dialer *d = NULL; - nng_stream_listener *l = NULL; - nng_sockaddr sa; - uint8_t ip[4]; + nng_stream_dialer *d = NULL; + nng_stream_listener *l = NULL; nng_aio *daio = NULL; nng_aio *laio = NULL; nng_aio *maio = NULL; @@ -30,10 +28,12 @@ test_tcp_stream(void) nng_aio *aio1; nng_aio *aio2; nng_iov iov; - nng_sockaddr sa2; + const nng_sockaddr *sap1; + const nng_sockaddr *sap2; char buf1[5]; char buf2[5]; bool on; + int port; NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL)); @@ -43,18 +43,12 @@ test_tcp_stream(void) NUTS_PASS(nng_stream_listener_alloc(&l, "tcp://127.0.0.1")); NUTS_PASS(nng_stream_listener_listen(l)); - - ip[0] = 127; - ip[1] = 0; - ip[2] = 0; - ip[3] = 1; - NUTS_PASS(nng_stream_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); - NUTS_TRUE(sa.s_in.sa_port != 0); - NUTS_TRUE(memcmp(&sa.s_in.sa_addr, ip, 4) == 0); + NUTS_PASS(nng_stream_listener_get_int(l, NNG_OPT_BOUND_PORT, &port)); + NUTS_TRUE(port > 0); + NUTS_TRUE(port <= 0xffff); char uri[64]; - snprintf(uri, sizeof(uri), "tcp://127.0.0.1:%d", - nuts_be16(sa.s_in.sa_port)); + snprintf(uri, sizeof(uri), "tcp://127.0.0.1:%d", port); NUTS_PASS(nng_stream_dialer_alloc(&d, uri)); nng_stream_dialer_dial(d, daio); @@ -105,16 +99,13 @@ test_tcp_stream(void) NUTS_TRUE(memcmp(buf1, buf2, 5) == 0); - NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); - NUTS_TRUE(sa2.s_in.sa_family == NNG_AF_INET); - - NUTS_TRUE(sa2.s_in.sa_addr == sa.s_in.sa_addr); - NUTS_TRUE(sa2.s_in.sa_port == sa.s_in.sa_port); + sap1 = nng_stream_self_addr(c2); + NUTS_TRUE(sap1->s_in.sa_family == NNG_AF_INET); - NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa2)); - NUTS_TRUE(sa2.s_in.sa_family == NNG_AF_INET); - NUTS_TRUE(sa2.s_in.sa_addr == sa.s_in.sa_addr); - NUTS_TRUE(sa2.s_in.sa_port == sa.s_in.sa_port); + sap2 = nng_stream_peer_addr(c1); + NUTS_TRUE(sap2->s_in.sa_family == NNG_AF_INET); + NUTS_TRUE(sap2->s_in.sa_addr == sap1->s_in.sa_addr); + NUTS_TRUE(sap2->s_in.sa_port == sap1->s_in.sa_port); nng_stream_listener_free(l); nng_stream_dialer_free(d); diff --git a/src/platform/windows/win_ipcdial.c b/src/platform/windows/win_ipcdial.c index 04ee5829..c9aabfe4 100644 --- a/src/platform/windows/win_ipcdial.c +++ b/src/platform/windows/win_ipcdial.c @@ -205,19 +205,7 @@ ipc_dialer_free(void *arg) NNI_FREE_STRUCT(d); } -static nng_err -ipc_dialer_get_remaddr(void *arg, void *buf, size_t *szp, nni_type t) -{ - ipc_dialer *d = arg; - - return (nni_copyout_sockaddr(&d->sa, buf, szp, t)); -} - static const nni_option ipc_dialer_options[] = { - { - .o_name = NNG_OPT_REMADDR, - .o_get = ipc_dialer_get_remaddr, - }, { .o_name = NULL, }, diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c index 07c69507..26c5573e 100644 --- a/src/platform/windows/win_ipclisten.c +++ b/src/platform/windows/win_ipclisten.c @@ -158,18 +158,7 @@ ipc_listener_set_sec_desc(void *arg, void *desc) return (NNG_OK); } -static nng_err -ipc_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t) -{ - ipc_listener *l = arg; - return ((nni_copyout_sockaddr(&l->sa, buf, szp, t))); -} - static const nni_option ipc_listener_options[] = { - { - .o_name = NNG_OPT_LOCADDR, - .o_get = ipc_listener_get_addr, - }, { .o_name = NULL, }, diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c index b32c1fbb..a0d7a249 100644 --- a/src/platform/windows/win_tcplisten.c +++ b/src/platform/windows/win_tcplisten.c @@ -502,10 +502,6 @@ tcp_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t) #endif static const nni_option tcp_listener_options[] = { - { - .o_name = NNG_OPT_LOCADDR, - .o_get = tcp_listener_get_locaddr, - }, { .o_name = NNG_OPT_TCP_NODELAY, .o_set = tcp_listener_set_nodelay, -- cgit v1.2.3-70-g09d2