aboutsummaryrefslogtreecommitdiff
path: root/src/core/transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/transport.c')
-rw-r--r--src/core/transport.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/core/transport.c b/src/core/transport.c
index 4733b6bd..8485d048 100644
--- a/src/core/transport.c
+++ b/src/core/transport.c
@@ -118,12 +118,28 @@ nni_tran_chkopt(const char *name, const void *v, size_t sz, int typ)
nni_mtx_lock(&nni_tran_lk);
NNI_LIST_FOREACH (&nni_tran_list, t) {
- const nni_tran_ep_ops *ep;
- const nni_tran_option *o;
+ const nni_tran_dialer_ops * dops;
+ const nni_tran_listener_ops *lops;
+ const nni_tran_option * o;
+
+ // Generally we look for endpoint options. We check both
+ // dialers and listeners.
+ dops = t->t_tran.tran_dialer;
+ for (o = dops->d_options; o && o->o_name != NULL; o++) {
+ if (strcmp(name, o->o_name) != 0) {
+ continue;
+ }
+ if (o->o_set == NULL) {
+ nni_mtx_unlock(&nni_tran_lk);
+ return (NNG_EREADONLY);
+ }
- // Generally we look for endpoint options.
- ep = t->t_tran.tran_ep;
- for (o = ep->ep_options; o && o->o_name != NULL; o++) {
+ rv = (o->o_chk != NULL) ? o->o_chk(v, sz, typ) : 0;
+ nni_mtx_unlock(&nni_tran_lk);
+ return (rv);
+ }
+ lops = t->t_tran.tran_listener;
+ for (o = lops->l_options; o && o->o_name != NULL; o++) {
if (strcmp(name, o->o_name) != 0) {
continue;
}