aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/dialer.c37
-rw-r--r--src/core/dialer.h1
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(