diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/dialer.c | 37 | ||||
| -rw-r--r-- | src/core/dialer.h | 1 |
2 files changed, 29 insertions, 9 deletions
diff --git a/src/core/dialer.c b/src/core/dialer.c index bef110d7..9b868224 100644 --- a/src/core/dialer.c +++ b/src/core/dialer.c @@ -458,22 +458,16 @@ nni_dialer_start(nni_dialer *d, unsigned flags) nni_aio aio; nni_aio *aiop = NULL; - if (nni_atomic_flag_test_and_set(&d->d_started)) { - return (NNG_ESTATE); - } - if ((flags & NNG_FLAG_NONBLOCK) != 0) { aiop = NULL; } else { nni_aio_init(&aio, NULL, NULL); aiop = &aio; - nni_aio_start(aiop, NULL, NULL); } - nni_mtx_lock(&d->d_mtx); - d->d_user_aio = aiop; - dialer_connect_start(d); - nni_mtx_unlock(&d->d_mtx); + if ((rv = nni_dialer_start_aio(d, flags, aiop)) != 0) { + return (rv); + } if (aiop != NULL) { nni_aio_wait(aiop); @@ -481,6 +475,31 @@ nni_dialer_start(nni_dialer *d, unsigned flags) nni_aio_fini(aiop); } + return (rv); +} + +int +nni_dialer_start_aio(nni_dialer *d, unsigned flags, nni_aio *aiop) +{ + int rv = 0; + + if (nni_atomic_flag_test_and_set(&d->d_started)) { + return (NNG_ESTATE); + } + + if (aiop != NULL) { + nni_aio_start(aiop, NULL, NULL); + } + + // Note that flags is currently unused, since the only flag is + // NONBLOCK, which is handled in callers. + NNI_ARG_UNUSED(flags); + + nni_mtx_lock(&d->d_mtx); + d->d_user_aio = aiop; + dialer_connect_start(d); + nni_mtx_unlock(&d->d_mtx); + nng_log_info("NNG-DIAL", "Starting dialer for socket<%u>", nni_sock_id(d->d_sock)); diff --git a/src/core/dialer.h b/src/core/dialer.h index bd987866..26cd5c0d 100644 --- a/src/core/dialer.h +++ b/src/core/dialer.h @@ -23,6 +23,7 @@ extern int nni_dialer_create(nni_dialer **, nni_sock *, const char *); extern int nni_dialer_create_url(nni_dialer **, nni_sock *, const nng_url *); extern void nni_dialer_close(nni_dialer *); extern int nni_dialer_start(nni_dialer *, unsigned); +extern int nni_dialer_start_aio(nni_dialer *, unsigned, nni_aio *); extern nni_sock *nni_dialer_sock(nni_dialer *); extern int nni_dialer_setopt( |
