summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2014-11-16 04:08:37 +0100
committerMartin Sustrik <sustrik@250bpm.com>2014-11-16 04:08:37 +0100
commit52cc85c3d084ffb6d151927492584b94f3496797 (patch)
treef42b28277a584ac0c0beca7929cbf5a10d0fde1e
parent1fb3641ac1179e8d227c9c9ea5e373b206f321fd (diff)
downloadnanomsg-52cc85c3d084ffb6d151927492584b94f3496797.tar.gz
Try reconnecting if bind to a local interface fails.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
-rw-r--r--src/transports/tcp/ctcp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/transports/tcp/ctcp.c b/src/transports/tcp/ctcp.c
index 1b8510d..705ac03 100644
--- a/src/transports/tcp/ctcp.c
+++ b/src/transports/tcp/ctcp.c
@@ -616,7 +616,11 @@ static void nn_ctcp_start_connecting (struct nn_ctcp *self,
/* Bind the socket to the local network interface. */
rc = nn_usock_bind (&self->usock, (struct sockaddr*) &local, locallen);
- errnum_assert (rc == 0, -rc);
+ if (nn_slow (rc != 0)) {
+ nn_backoff_start (&self->retry);
+ self->state = NN_CTCP_STATE_WAITING;
+ return;
+ }
/* Start connecting. */
nn_usock_connect (&self->usock, (struct sockaddr*) &remote, remotelen);