int connecting:1; /* 1 if we are waiting for a non-blocking connect() to finish */
int termreq:1; /* the termination of this connection was requested */
int remove_unused:1; /* Set to 1 if you want this connection removed */
- int timeout:1; /* 1 if gotten timeout */
+ int timeout_unused:1; /* 1 if gotten timeout */
int encryptout:1; /* 1 if we can encrypt outgoing traffic */
int decryptin:1; /* 1 if we have to decrypt incoming traffic */
int mst:1; /* 1 if this connection is part of a minimum spanning tree */
/* Check if this was our outgoing connection */
- if(c->outgoing) {
+ if(c->outgoing)
retry_outgoing(c->outgoing);
- c->outgoing = NULL;
- } else {
- connection_del(c);
- }
+
+ connection_del(c);
}
/*
if(c->status.pinged) {
ifdebug(CONNECTIONS) logger(LOG_INFO, _("%s (%s) didn't respond to PING in %ld seconds"),
c->name, c->hostname, now - c->last_ping_time);
- c->status.timeout = true;
terminate_connection(c, true);
continue;
} else if(c->last_ping_time + pinginterval < now) {
send_ping(c);
}
} else {
- ifdebug(CONNECTIONS) logger(LOG_WARNING, _("Timeout from %s (%s) during authentication"),
- c->name, c->hostname);
if(c->status.connecting) {
+ ifdebug(CONNECTIONS)
+ logger(LOG_WARNING, _("Timeout while connecting to %s (%s)"), c->name, c->hostname);
c->status.connecting = false;
closesocket(c->socket);
do_outgoing_connection(c);
} else {
+ ifdebug(CONNECTIONS) logger(LOG_WARNING, _("Timeout from %s (%s) during authentication"), c->name, c->hostname);
terminate_connection(c, false);
continue;
}
socklen_t len = sizeof(result);
if(c->status.connecting) {
+ c->status.connecting = false;
+
getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len);
if(!result)
ifdebug(CONNECTIONS) logger(LOG_DEBUG,
_("Error while connecting to %s (%s): %s"),
c->name, c->hostname, strerror(result));
- c->status.connecting = false;
closesocket(c->socket);
do_outgoing_connection(c);
return;
}
static void retry_outgoing_handler(int fd, short events, void *data) {
- do_outgoing_connection(data);
+ setup_outgoing_connection(data);
}
void retry_outgoing(outgoing_t *outgoing) {
ifdebug(CONNECTIONS) logger(LOG_ERR, _("Could not set up a meta connection to %s"),
c->name);
retry_outgoing(c->outgoing);
+ c->outgoing = NULL;
+ connection_del(c);
return;
}