aboutsummaryrefslogtreecommitdiff
path: root/src/compat
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-04-04 12:37:34 -0700
committerGarrett D'Amore <garrett@damore.org>2018-04-04 13:13:24 -0700
commit45f455064b5704f3d5ed8ecf9f197a18fe72ee59 (patch)
tree76a626029f3a5a818b113b7e4342efaf6220a03f /src/compat
parent505a9bce029e51540739c853a6c9eef0ecfb2e90 (diff)
downloadnng-45f455064b5704f3d5ed8ecf9f197a18fe72ee59.tar.gz
nng-45f455064b5704f3d5ed8ecf9f197a18fe72ee59.tar.bz2
nng-45f455064b5704f3d5ed8ecf9f197a18fe72ee59.zip
fixes #331 replace NNG_OPT_RAW option with constructor
This makes the raw mode something that is immutable, determined at socket construction. This is an enabling change for the separate context support coming soon. As a result, this is an API breaking change for users of the raw mode option (NNG_OPT_RAW). There aren't many of them out there. Cooked mode is entirely unaffected. There are changes to tests and documentation included.
Diffstat (limited to 'src/compat')
-rw-r--r--src/compat/nanomsg/nn.c86
1 files changed, 63 insertions, 23 deletions
diff --git a/src/compat/nanomsg/nn.c b/src/compat/nanomsg/nn.c
index caa02c72..a95481bf 100644
--- a/src/compat/nanomsg/nn.c
+++ b/src/compat/nanomsg/nn.c
@@ -110,40 +110,81 @@ nn_errno(void)
static const struct {
uint16_t p_id;
int (*p_open)(nng_socket *);
+ int (*p_open_raw)(nng_socket *);
} nn_protocols[] = {
-// clang-format off
#ifdef NNG_HAVE_BUS0
- { NN_BUS, nng_bus0_open },
+ {
+ .p_id = NN_BUS,
+ .p_open = nng_bus0_open,
+ .p_open_raw = nng_bus0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_PAIR0
- { NN_PAIR, nng_pair0_open },
-#endif
-#ifdef NNG_HAVE_PUSH0
- { NN_PUSH, nng_push0_open },
+ {
+ .p_id = NN_PAIR,
+ .p_open = nng_pair0_open,
+ .p_open_raw = nng_pair0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_PULL0
- { NN_PULL, nng_pull0_open },
+ {
+ .p_id = NN_PULL,
+ .p_open = nng_pull0_open,
+ .p_open_raw = nng_pull0_open_raw,
+ },
+#endif
+#ifdef NNG_HAVE_PUSH0
+ {
+ .p_id = NN_PUSH,
+ .p_open = nng_push0_open,
+ .p_open_raw = nng_push0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_PUB0
- { NN_PUB, nng_pub0_open },
+ {
+ .p_id = NN_PUB,
+ .p_open = nng_pub0_open,
+ .p_open_raw = nng_pub0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_SUB0
- { NN_SUB, nng_sub0_open },
+ {
+ .p_id = NN_SUB,
+ .p_open = nng_sub0_open,
+ .p_open_raw = nng_sub0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_REQ0
- { NN_REQ, nng_req0_open },
+ {
+ .p_id = NN_REQ,
+ .p_open = nng_req0_open,
+ .p_open_raw = nng_req0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_REP0
- { NN_REP, nng_rep0_open },
+ {
+ .p_id = NN_REP,
+ .p_open = nng_rep0_open,
+ .p_open_raw = nng_rep0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_SURVEYOR0
- { NN_SURVEYOR, nng_surveyor0_open },
+ {
+ .p_id = NN_SURVEYOR,
+ .p_open = nng_surveyor0_open,
+ .p_open_raw = nng_surveyor0_open_raw,
+ },
#endif
#ifdef NNG_HAVE_RESPONDENT0
- { NN_RESPONDENT, nng_respondent0_open },
+ {
+ .p_id = NN_RESPONDENT,
+ .p_open = nng_respondent0_open,
+ .p_open_raw = nng_respondent0_open_raw,
+ },
#endif
- { 0, NULL },
- // clang-format on
+ {
+ .p_id = 0,
+ },
};
int
@@ -168,17 +209,16 @@ nn_socket(int domain, int protocol)
return (-1);
}
- if ((rv = nn_protocols[i].p_open(&sock)) != 0) {
+ if (domain == AF_SP_RAW) {
+ rv = nn_protocols[i].p_open_raw(&sock);
+ } else {
+ rv = nn_protocols[i].p_open(&sock);
+ }
+ if (rv != 0) {
nn_seterror(rv);
return (-1);
}
- if (domain == AF_SP_RAW) {
- if ((rv = nng_setopt_bool(sock, NNG_OPT_RAW, true)) != 0) {
- nn_seterror(rv);
- nng_close(sock);
- return (-1);
- }
- }
+
return ((int) sock);
}