From 60231f0600461a9593a8f876518874866df3387a Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 16 Feb 2019 12:40:41 -0800 Subject: fixes #879 Desire NNG_OPT_TCP_BOUND_PORT We also have made some support changes, including new APIs for printing URLs, and some improvements to the NNG_OPT_URL to make use of this new property. --- src/supplemental/tcp/tcp.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/supplemental') diff --git a/src/supplemental/tcp/tcp.c b/src/supplemental/tcp/tcp.c index 3ec396b8..21922ef6 100644 --- a/src/supplemental/tcp/tcp.c +++ b/src/supplemental/tcp/tcp.c @@ -326,11 +326,52 @@ tcp_listener_accept(void *arg, nng_aio *aio) 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_getopt( + 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_in.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_getx( 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_getopt(l->l, name, buf, szp, t)); } -- cgit v1.2.3-70-g09d2