X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=3c884782152b7b66445b58123e88131c44a85f93;hp=6de95b5f0c87ebb1ed7778c42856fa0c7499f302;hb=cc01b18bc6d0bfb12e6770fc0a007c278f355d9e;hpb=9d023b1f2e7750f4a0e506c0f61498a44c0b95a8 diff --git a/src/net.c b/src/net.c index 6de95b5f..3c884782 100644 --- a/src/net.c +++ b/src/net.c @@ -51,6 +51,8 @@ int total_tap_out = 0; int total_socket_in = 0; int total_socket_out = 0; +static int seconds_till_retry; + /* The global list of existing connections */ conn_list_t *conn_list = NULL; conn_list_t *myself = NULL; @@ -541,6 +543,30 @@ cp return 0; } +RETSIGTYPE +sigalrm_handler(int a) +{ + config_t const *cfg; +cp + cfg = get_config_val(upstreamip); + + if(!setup_outgoing_connection(cfg->data.ip->ip)) + { + signal(SIGALRM, SIG_IGN); + } + else + { + signal(SIGALRM, sigalrm_handler); + seconds_till_retry += 5; + if(seconds_till_retry>300) /* Don't wait more than 5 minutes. */ + seconds_till_retry = 300; + alarm(seconds_till_retry); + syslog(LOG_ERR, "Still failed to connect to other. Will retry in %d seconds.", + seconds_till_retry); + } +cp +} + /* setup all initial network connections */ @@ -564,33 +590,14 @@ cp return 0; if(setup_outgoing_connection(cfg->data.ip->ip)) - return -1; -cp - return 0; -} - -RETSIGTYPE -sigalrm_handler(int a) -{ - config_t const *cfg; - static int seconds_till_retry; -cp - cfg = get_config_val(upstreamip); - - if(!setup_outgoing_connection(cfg->data.ip->ip)) - { - signal(SIGALRM, SIG_IGN); - seconds_till_retry = 5; - } - else { signal(SIGALRM, sigalrm_handler); - seconds_till_retry += 5; + seconds_till_retry = 300; alarm(seconds_till_retry); - syslog(LOG_ERR, "Still failed to connect to other. Will retry in %d seconds.", - seconds_till_retry); + syslog(LOG_NOTICE, "Try to re-establish outgoing connection in 5 minutes."); } cp + return 0; } /* @@ -654,8 +661,8 @@ cp if(connect(nfd, (struct sockaddr *)&a, sizeof(a)) == -1) { - syslog(LOG_ERR, "Create connection to %08lx:%d failed: %m", ntohs(cl->real_ip), - cl->port); + syslog(LOG_ERR, "Connecting to " IP_ADDR_S ":%d failed: %m", + IP_ADDR_V(cl->real_ip), cl->port); return -1; } @@ -821,11 +828,13 @@ cp if(cl->status.outgoing) { - alarm(5); signal(SIGALRM, sigalrm_handler); + seconds_till_retry = 5; + alarm(seconds_till_retry); syslog(LOG_NOTICE, "Try to re-establish outgoing connection in 5 seconds."); } + cl->status.active = 0; cl->status.remove = 1; cp }