X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet.c;h=8fe3c516c14d08646ffad222a4bce8edb116c5e0;hb=5217c16db4babd64580c2fd7aa36180bb9bd838c;hp=286f15763e2f6cbd4e7bf632f91c550106d718f7;hpb=57991e264202ad83e2c1b663777b358bf5573652;p=tinc diff --git a/src/net.c b/src/net.c index 286f1576..8fe3c516 100644 --- a/src/net.c +++ b/src/net.c @@ -36,6 +36,10 @@ #include "subnet.h" #include "xalloc.h" +#ifdef HAVE_RESOLV_H +#include +#endif + int contradicting_add_edge = 0; int contradicting_del_edge = 0; static int sleeptime = 10; @@ -129,6 +133,12 @@ void terminate_connection(connection_t *c, bool report) { if(outgoing) do_outgoing_connection(outgoing); + +#ifndef HAVE_MINGW + /* Clean up dead proxy processes */ + + while(waitpid(-1, NULL, WNOHANG) > 0); +#endif } /* @@ -198,7 +208,7 @@ static void periodic_handler(void *data) { nc++; } - if(nc < autoconnect) { + if(nc < 3) { /* Not enough active connections, try to add one. Choose a random node, if we don't have a connection to it, and we are not already trying to make one, create an @@ -232,7 +242,7 @@ static void periodic_handler(void *data) { } break; } - } else if(nc > autoconnect) { + } else if(nc > 3) { /* Too many active connections, try to remove one. Choose a random outgoing connection to a node that has at least one other connection. @@ -258,7 +268,7 @@ static void periodic_handler(void *data) { } } - if(nc >= autoconnect) { + if(nc >= 3) { /* If we have enough active connections, remove any pending outgoing connections. */ @@ -303,6 +313,9 @@ static void sighup_handler(void *data) { static void sigalrm_handler(void *data) { logger(DEBUG_ALWAYS, LOG_NOTICE, "Got %s signal", strsignal(((signal_t *)data)->signum)); +#ifdef HAVE_DECL_RES_INIT + res_init(); +#endif retry(); } #endif @@ -334,11 +347,14 @@ int reload_configuration(void) { if(strictsubnets) { for splay_each(subnet_t, subnet, subnet_tree) - subnet->expires = 1; + if (subnet->owner) + subnet->expires = 1; load_all_subnets(); for splay_each(subnet_t, subnet, subnet_tree) { + if (!subnet->owner) + continue; if(subnet->expires == 1) { send_del_subnet(everyone, subnet); if(subnet->owner->status.reachable) @@ -452,7 +468,7 @@ int main_loop(void) { #endif if(!event_loop()) { - logger(DEBUG_ALWAYS, LOG_ERR, "Error while waiting for input: %s", strerror(errno)); + logger(DEBUG_ALWAYS, LOG_ERR, "Error while waiting for input: %s", sockstrerror(sockerrno)); return 1; }