aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-28 13:53:18 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-28 13:53:24 -0800
commit7b5515ca641f475dce8184a5d9fd67ceb860e843 (patch)
treedd6e458ea87df33b3d9b359572abdd63154c6999 /src/core
parent146e10d365e3c451ba92b226e0d7cbfcc3574383 (diff)
downloadnng-7b5515ca641f475dce8184a5d9fd67ceb860e843.tar.gz
nng-7b5515ca641f475dce8184a5d9fd67ceb860e843.tar.bz2
nng-7b5515ca641f475dce8184a5d9fd67ceb860e843.zip
tcp: flatten the listener implementation
The endpoints both use a nesting level for some common code and some platform dependent code. But the common code isn't that much and we have similar patterns for e.g. IPC. This avoids a layer of indirection in the structs, and extra allocations. The payoff will be even larger for the dialers, but that is next. (Dialers are more complicated because of DNS.)
Diffstat (limited to 'src/core')
-rw-r--r--src/core/tcp.c140
1 files changed, 0 insertions, 140 deletions
diff --git a/src/core/tcp.c b/src/core/tcp.c
index 159ffe41..fd1c7e96 100644
--- a/src/core/tcp.c
+++ b/src/core/tcp.c
@@ -273,143 +273,3 @@ nni_tcp_dialer_alloc(nng_stream_dialer **dp, const nng_url *url)
*dp = (void *) d;
return (0);
}
-
-typedef struct {
- nng_stream_listener ops;
- nni_tcp_listener *l;
- nng_sockaddr sa;
-} tcp_listener;
-
-static void
-tcp_listener_close(void *arg)
-{
- tcp_listener *l = arg;
- nni_tcp_listener_close(l->l);
-}
-
-static void
-tcp_listener_stop(void *arg)
-{
- tcp_listener *l = arg;
- nni_tcp_listener_stop(l->l);
-}
-
-static void
-tcp_listener_free(void *arg)
-{
- tcp_listener *l = arg;
- nni_tcp_listener_fini(l->l);
- NNI_FREE_STRUCT(l);
-}
-
-static int
-tcp_listener_listen(void *arg)
-{
- tcp_listener *l = arg;
- return (nni_tcp_listener_listen(l->l, &l->sa));
-}
-
-static void
-tcp_listener_accept(void *arg, nng_aio *aio)
-{
- tcp_listener *l = arg;
- nni_tcp_listener_accept(l->l, aio);
-}
-
-static int
-tcp_listener_get_port(void *arg, void *buf, size_t *szp, nni_type t)
-{
- tcp_listener *l = arg;
- int rv;
- nng_sockaddr sa;
- size_t sz;
- int port;
- uint8_t *paddr;
-
- sz = sizeof(sa);
- rv = nni_tcp_listener_get(
- l->l, NNG_OPT_LOCADDR, &sa, &sz, NNI_TYPE_SOCKADDR);
- if (rv != 0) {
- return (rv);
- }
-
- switch (sa.s_family) {
- case NNG_AF_INET:
- paddr = (void *) &sa.s_in.sa_port;
- break;
-
- case NNG_AF_INET6:
- paddr = (void *) &sa.s_in6.sa_port;
- break;
-
- default:
- paddr = NULL;
- break;
- }
-
- if (paddr == NULL) {
- return (NNG_ESTATE);
- }
-
- NNI_GET16(paddr, port);
- return (nni_copyout_int(port, buf, szp, t));
-}
-
-static int
-tcp_listener_get(
- void *arg, const char *name, void *buf, size_t *szp, nni_type t)
-{
- tcp_listener *l = arg;
- if (strcmp(name, NNG_OPT_TCP_BOUND_PORT) == 0) {
- return (tcp_listener_get_port(l, buf, szp, t));
- }
- return (nni_tcp_listener_get(l->l, name, buf, szp, t));
-}
-
-static int
-tcp_listener_set(
- void *arg, const char *name, const void *buf, size_t sz, nni_type t)
-{
- tcp_listener *l = arg;
- return (nni_tcp_listener_set(l->l, name, buf, sz, t));
-}
-
-static int
-tcp_listener_alloc_addr(nng_stream_listener **lp, const nng_sockaddr *sa)
-{
- tcp_listener *l;
- int rv;
-
- if ((l = NNI_ALLOC_STRUCT(l)) == NULL) {
- return (NNG_ENOMEM);
- }
- if ((rv = nni_tcp_listener_init(&l->l)) != 0) {
- NNI_FREE_STRUCT(l);
- return (rv);
- }
- l->sa = *sa;
-
- l->ops.sl_free = tcp_listener_free;
- l->ops.sl_close = tcp_listener_close;
- l->ops.sl_stop = tcp_listener_stop;
- l->ops.sl_listen = tcp_listener_listen;
- l->ops.sl_accept = tcp_listener_accept;
- l->ops.sl_get = tcp_listener_get;
- l->ops.sl_set = tcp_listener_set;
-
- *lp = (void *) l;
- return (0);
-}
-
-int
-nni_tcp_listener_alloc(nng_stream_listener **lp, const nng_url *url)
-{
- int rv;
- nng_sockaddr sa;
-
- if ((rv = nni_url_to_address(&sa, url)) != 0) {
- return (rv);
- }
-
- return (tcp_listener_alloc_addr(lp, &sa));
-}