aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-01-04 11:03:54 -0800
committerGarrett D'Amore <garrett@damore.org>2017-01-04 11:03:54 -0800
commita1d543fc45dbd066020c8c15ea37421bdd49bc10 (patch)
treeffe23cc0352990efb71956effa47d6d1f63ed9e8
parent4e8b4ec4396f13665dccc03363c1378cabaefeb4 (diff)
downloadnng-a1d543fc45dbd066020c8c15ea37421bdd49bc10.tar.gz
nng-a1d543fc45dbd066020c8c15ea37421bdd49bc10.tar.bz2
nng-a1d543fc45dbd066020c8c15ea37421bdd49bc10.zip
Test for duplicate address listen, and fix in TCP for same.
-rw-r--r--src/core/defs.h2
-rw-r--r--src/transport/tcp/tcp.c2
-rw-r--r--tests/trantest.h16
3 files changed, 17 insertions, 3 deletions
diff --git a/src/core/defs.h b/src/core/defs.h
index ed2e353f..92ebdb86 100644
--- a/src/core/defs.h
+++ b/src/core/defs.h
@@ -55,7 +55,7 @@ typedef struct {
#define NNI_PUT16(ptr, u) \
do { \
(ptr)[0] = (uint8_t) (((uint16_t) (u)) >> 8); \
- (ptr)[0] = (uint8_t) ((uint16_t) (u)); \
+ (ptr)[1] = (uint8_t) ((uint16_t) (u)); \
} \
while (0)
diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c
index 3fe31f9b..8cd91044 100644
--- a/src/transport/tcp/tcp.c
+++ b/src/transport/tcp/tcp.c
@@ -386,7 +386,7 @@ nni_tcp_ep_bind(void *arg)
}
baddr.s_un.s_in.sa_port = port;
- if ((rv == nni_plat_tcp_listen(&ep->fd, &baddr)) != 0) {
+ if ((rv = nni_plat_tcp_listen(&ep->fd, &baddr)) != 0) {
return (rv);
}
return (0);
diff --git a/tests/trantest.h b/tests/trantest.h
index a38db4b0..fb5392a5 100644
--- a/tests/trantest.h
+++ b/tests/trantest.h
@@ -65,6 +65,19 @@ trantest_conn_refused(trantest *tt)
}
void
+trantest_duplicate_listen(trantest *tt)
+{
+ Convey("Duplicate listen rejected", {
+ nng_endpoint *ep;
+ So(nng_listen(tt->repsock, tt->addr, &ep, NNG_FLAG_SYNCH) == 0);
+ So(ep != NULL);
+ ep = NULL;
+ So(nng_listen(tt->reqsock, tt->addr, &ep, NNG_FLAG_SYNCH) == NNG_EADDRINUSE);
+ So(ep == NULL);
+ })
+}
+
+void
trantest_test_all(const char *addr)
{
trantest tt;
@@ -78,5 +91,6 @@ trantest_test_all(const char *addr)
trantest_scheme(&tt);
trantest_conn_refused(&tt);
+ trantest_duplicate_listen(&tt);
})
-} \ No newline at end of file
+}