projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix retrying outgoing connections.
[tinc]
/
src
/
net.c
diff --git
a/src/net.c
b/src/net.c
index
d78770e
..
2c7cc55
100644
(file)
--- a/
src/net.c
+++ b/
src/net.c
@@
-154,12
+154,10
@@
void terminate_connection(connection_t *c, bool report) {
/* Check if this was our outgoing connection */
/* Check if this was our outgoing connection */
- if(c->outgoing)
{
+ if(c->outgoing)
retry_outgoing(c->outgoing);
retry_outgoing(c->outgoing);
- c->outgoing = NULL;
- } else {
- connection_del(c);
- }
+
+ connection_del(c);
}
/*
}
/*
@@
-186,20
+184,20
@@
static void timeout_handler(int fd, short events, void *event) {
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);
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 {
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) {
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 {
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;
}
terminate_connection(c, false);
continue;
}
@@
-216,6
+214,8
@@
void handle_meta_connection_data(int fd, short events, void *data) {
socklen_t len = sizeof(result);
if(c->status.connecting) {
socklen_t len = sizeof(result);
if(c->status.connecting) {
+ c->status.connecting = false;
+
getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len);
if(!result)
getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len);
if(!result)
@@
-224,7
+224,6
@@
void handle_meta_connection_data(int fd, short events, void *data) {
ifdebug(CONNECTIONS) logger(LOG_DEBUG,
_("Error while connecting to %s (%s): %s"),
c->name, c->hostname, strerror(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;
closesocket(c->socket);
do_outgoing_connection(c);
return;