X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet.c;h=f9020b3b9aa8d4ab771167fa3cb5760ebe6f4211;hb=574b380dfc75ef13ee4accba1f2416165c58a5a2;hp=7ce4f318bd732486770de4ee8adc68762da25104;hpb=3b237afbda86bc95703ed25386cc9a26695d4602;p=tinc diff --git a/src/net.c b/src/net.c index 7ce4f318..f9020b3b 100644 --- a/src/net.c +++ b/src/net.c @@ -39,6 +39,7 @@ int contradicting_add_edge = 0; int contradicting_del_edge = 0; +static int sleeptime = 10; /* Purge edges and subnets of unreachable nodes. Use carefully. */ @@ -116,9 +117,6 @@ void terminate_connection(connection_t *c, bool report) { if(c->node) c->node->connection = NULL; - if(c->socket) - closesocket(c->socket); - if(c->edge) { if(report && !tunnelserver) send_del_edge(broadcast, c->edge); @@ -193,19 +191,21 @@ static void timeout_handler(int fd, short events, void *event) { } } - if(contradicting_del_edge && contradicting_add_edge) { - logger(LOG_WARNING, "Possible node with same Name as us!"); - - if(rand() % 3 == 0) { - logger(LOG_ERR, "Shutting down, check configuration of all nodes for duplicate Names!"); - event_loopexit(NULL); - return; - } - - contradicting_add_edge = 0; - contradicting_del_edge = 0; + if(contradicting_del_edge > 100 && contradicting_add_edge > 100) { + logger(LOG_WARNING, "Possible node with same Name as us! Sleeping %d seconds.", sleeptime); + usleep(sleeptime * 1000000LL); + sleeptime *= 2; + if(sleeptime < 0) + sleeptime = 3600; + } else { + sleeptime /= 2; + if(sleeptime < 10) + sleeptime = 10; } + contradicting_add_edge = 0; + contradicting_del_edge = 0; + event_add(event, &(struct timeval){pingtimeout, 0}); }