aboutsummaryrefslogtreecommitdiff
path: root/src/supplemental
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2019-02-16 12:40:41 -0800
committerGarrett D'Amore <garrett@damore.org>2019-02-16 19:22:27 -0800
commit60231f0600461a9593a8f876518874866df3387a (patch)
tree1a91f0b65b1ad2d5b995a3db21639f4bf7032066 /src/supplemental
parent5cf750697624d4fd63cfe26921209d7c30e1a2d2 (diff)
downloadnng-60231f0600461a9593a8f876518874866df3387a.tar.gz
nng-60231f0600461a9593a8f876518874866df3387a.tar.bz2
nng-60231f0600461a9593a8f876518874866df3387a.zip
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.
Diffstat (limited to 'src/supplemental')
-rw-r--r--src/supplemental/tcp/tcp.c41
1 files changed, 41 insertions, 0 deletions
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
@@ -327,10 +327,51 @@ tcp_listener_accept(void *arg, nng_aio *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));
}