From 269fd9ab6f2091968712849444483661f6b47f6b Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sun, 24 Nov 2024 17:52:35 -0800 Subject: [PATCH 1/2] tls: don't use an extra resolver step in the listener. This was centralized in the stream layer a while ago. --- src/sp/transport/tls/tls.c | 40 +------------------------------------- 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c index 00d2554df..9d02b5282 100644 --- a/src/sp/transport/tls/tls.c +++ b/src/sp/transport/tls/tls.c @@ -863,23 +863,8 @@ tlstran_ep_init_listener(void **lp, nng_url *url, nni_listener *nlistener) { tlstran_ep *ep; int rv; - uint16_t af; - char *host = url->u_hostname; - nni_aio *aio; nni_sock *sock = nni_listener_sock(nlistener); - if (strcmp(url->u_scheme, "tls+tcp") == 0) { - af = NNG_AF_UNSPEC; - } else if (strcmp(url->u_scheme, "tls+tcp4") == 0) { - af = NNG_AF_INET; -#ifdef NNG_ENABLE_IPV6 - } else if (strcmp(url->u_scheme, "tls+tcp6") == 0) { - af = NNG_AF_INET6; -#endif - } else { - return (NNG_EADDRINVAL); - } - // Check for invalid URL components. if ((strlen(url->u_path) != 0) && (strcmp(url->u_path, "/") != 0)) { return (NNG_EADDRINVAL); @@ -890,30 +875,7 @@ tlstran_ep_init_listener(void **lp, nng_url *url, nni_listener *nlistener) } if (((rv = tlstran_ep_init(&ep, url, sock)) != 0) || ((rv = nni_aio_alloc(&ep->connaio, tlstran_accept_cb, ep)) != 0) || - ((rv = nni_aio_alloc(&ep->timeaio, tlstran_timer_cb, ep)) != 0)) { - return (rv); - } - - if (strlen(host) == 0) { - host = NULL; - } - - // XXX: We are doing lookup at listener initialization. There is - // a valid argument that this should be done at bind time, but that - // would require making bind asynchronous. In some ways this would - // be worse than the cost of just waiting here. We always recommend - // using local IP addresses rather than names when possible. - - if ((rv = nni_aio_alloc(&aio, NULL, NULL)) != 0) { - tlstran_ep_fini(ep); - return (rv); - } - nni_resolv_ip(host, url->u_port, af, true, &ep->sa, aio); - nni_aio_wait(aio); - rv = nni_aio_result(aio); - nni_aio_free(aio); - - if ((rv != 0) || + ((rv = nni_aio_alloc(&ep->timeaio, tlstran_timer_cb, ep)) != 0) || ((rv = nng_stream_listener_alloc_url(&ep->listener, url)) != 0)) { tlstran_ep_fini(ep); return (rv); From c3620e65e9eba6311175bef76e39069838852a71 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sun, 24 Nov 2024 18:00:25 -0800 Subject: [PATCH 2/2] sockfd: inline aio structs --- src/sp/transport/socket/sockfd.c | 39 ++++++++++++++++---------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/sp/transport/socket/sockfd.c b/src/sp/transport/socket/sockfd.c index ca0130775..45927d197 100644 --- a/src/sp/transport/socket/sockfd.c +++ b/src/sp/transport/socket/sockfd.c @@ -1,5 +1,5 @@ // -// Copyright 2023 Staysail Systems, Inc. +// Copyright 2024 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // Copyright 2019 Devolutions // @@ -60,8 +60,8 @@ struct sfd_tran_ep { nng_sockaddr src; int refcnt; // active pipes nni_aio *useraio; - nni_aio *connaio; - nni_aio *timeaio; + nni_aio connaio; + nni_aio timeaio; nni_list busypipes; // busy pipes -- ones passed to socket nni_list waitpipes; // pipes waiting to match to socket nni_list negopipes; // pipes busy negotiating @@ -666,11 +666,11 @@ sfd_tran_ep_fini(void *arg) return; } nni_mtx_unlock(&ep->mtx); - nni_aio_stop(ep->timeaio); - nni_aio_stop(ep->connaio); + nni_aio_stop(&ep->timeaio); + nni_aio_stop(&ep->connaio); nng_stream_listener_free(ep->listener); - nni_aio_free(ep->timeaio); - nni_aio_free(ep->connaio); + nni_aio_fini(&ep->timeaio); + nni_aio_fini(&ep->connaio); nni_mtx_fini(&ep->mtx); NNI_FREE_STRUCT(ep); @@ -685,7 +685,7 @@ sfd_tran_ep_close(void *arg) nni_mtx_lock(&ep->mtx); ep->closed = true; - nni_aio_close(ep->timeaio); + nni_aio_close(&ep->timeaio); if (ep->listener != NULL) { nng_stream_listener_close(ep->listener); } @@ -710,8 +710,8 @@ static void sfd_tran_timer_cb(void *arg) { sfd_tran_ep *ep = arg; - if (nni_aio_result(ep->timeaio) == 0) { - nng_stream_listener_accept(ep->listener, ep->connaio); + if (nni_aio_result(&ep->timeaio) == 0) { + nng_stream_listener_accept(ep->listener, &ep->connaio); } } @@ -719,7 +719,7 @@ static void sfd_tran_accept_cb(void *arg) { sfd_tran_ep *ep = arg; - nni_aio *aio = ep->connaio; + nni_aio *aio = &ep->connaio; sfd_tran_pipe *p; int rv; nng_stream *conn; @@ -743,7 +743,7 @@ sfd_tran_accept_cb(void *arg) goto error; } sfd_tran_pipe_start(p, conn, ep); - nng_stream_listener_accept(ep->listener, ep->connaio); + nng_stream_listener_accept(ep->listener, &ep->connaio); nni_mtx_unlock(&ep->mtx); return; @@ -758,12 +758,12 @@ sfd_tran_accept_cb(void *arg) case NNG_ENOMEM: case NNG_ENOFILES: - nng_sleep_aio(10, ep->timeaio); + nng_sleep_aio(10, &ep->timeaio); break; default: if (!ep->closed) { - nng_stream_listener_accept(ep->listener, ep->connaio); + nng_stream_listener_accept(ep->listener, &ep->connaio); } break; } @@ -819,13 +819,14 @@ sfd_tran_listener_init(void **lp, nng_url *url, nni_listener *nlistener) return (rv); } - if (((rv = nni_aio_alloc(&ep->connaio, sfd_tran_accept_cb, ep)) != - 0) || - ((rv = nni_aio_alloc(&ep->timeaio, sfd_tran_timer_cb, ep)) != 0) || - ((rv = nng_stream_listener_alloc_url(&ep->listener, url)) != 0)) { + nni_aio_init(&ep->connaio, sfd_tran_accept_cb, ep); + nni_aio_init(&ep->timeaio, sfd_tran_timer_cb, ep); + + if ((rv = nng_stream_listener_alloc_url(&ep->listener, url)) != 0) { sfd_tran_ep_fini(ep); return (rv); } + #ifdef NNG_ENABLE_STATS nni_listener_add_stat(nlistener, &ep->st_rcv_max); #endif @@ -911,7 +912,7 @@ sfd_tran_ep_accept(void *arg, nni_aio *aio) ep->useraio = aio; if (!ep->started) { ep->started = true; - nng_stream_listener_accept(ep->listener, ep->connaio); + nng_stream_listener_accept(ep->listener, &ep->connaio); } else { sfd_tran_ep_match(ep); }