diff --git a/src/control.c b/src/control.c index 1f562134..f7d67ac3 100644 --- a/src/control.c +++ b/src/control.c @@ -215,6 +215,7 @@ bool init_control(void) { void exit_control(void) { #ifndef HAVE_MINGW + unlink(unixsocketname); io_del(&unix_socket); close(unix_socket.fd); #endif diff --git a/src/net_setup.c b/src/net_setup.c index 64d25150..39fd1e56 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -828,22 +828,6 @@ static bool setup_myself(void) { if(device_fd >= 0) io_add(&device_io, handle_device_data, NULL, device_fd, IO_READ); - /* Run tinc-up script to further initialize the tap interface */ - char *envp[5] = {NULL}; - xasprintf(&envp[0], "NETNAME=%s", netname ? : ""); - xasprintf(&envp[1], "DEVICE=%s", device ? : ""); - xasprintf(&envp[2], "INTERFACE=%s", iface ? : ""); - xasprintf(&envp[3], "NAME=%s", myself->name); - - execute_script("tinc-up", envp); - - for(int i = 0; i < 4; i++) - free(envp[i]); - - /* Run subnet-up scripts for our own subnets */ - - subnet_update(myself, NULL, true); - /* Open sockets */ if(!do_detach && getenv("LISTEN_FDS")) { @@ -957,9 +941,7 @@ static bool setup_myself(void) { } while(cfg); } - if(listen_sockets) - logger(DEBUG_ALWAYS, LOG_NOTICE, "Ready"); - else { + if(!listen_sockets) { logger(DEBUG_ALWAYS, LOG_ERR, "Unable to create any listening socket!"); return false; } @@ -997,6 +979,26 @@ bool setup_network(void) { if(!setup_myself()) return false; + if(!init_control()) + return false; + + /* Run tinc-up script to further initialize the tap interface */ + + char *envp[5] = {NULL}; + xasprintf(&envp[0], "NETNAME=%s", netname ? : ""); + xasprintf(&envp[1], "DEVICE=%s", device ? : ""); + xasprintf(&envp[2], "INTERFACE=%s", iface ? : ""); + xasprintf(&envp[3], "NAME=%s", myself->name); + + execute_script("tinc-up", envp); + + for(int i = 0; i < 4; i++) + free(envp[i]); + + /* Run subnet-up scripts for our own subnets */ + + subnet_update(myself, NULL, true); + return true; } @@ -1050,5 +1052,7 @@ void close_network_connections(void) { devops.close(); + exit_control(); + return; } diff --git a/src/tincd.c b/src/tincd.c index 3d6db8b9..84036ad4 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -400,14 +400,7 @@ int main2(int argc, char **argv) { /* Setup sockets and open device. */ if(!setup_network()) - goto end_nonet; - - if(!init_control()) - goto end_nonet; - - /* Initiate all outgoing connections. */ - - try_outgoing_connections(); + goto end; /* Change process priority */ @@ -439,6 +432,10 @@ int main2(int argc, char **argv) { /* Start main loop. It only exits when tinc is killed. */ + logger(DEBUG_ALWAYS, LOG_NOTICE, "Ready"); + + try_outgoing_connections(); + status = main_loop(); /* Shutdown properly. */ @@ -446,12 +443,9 @@ int main2(int argc, char **argv) { if(debug_level >= DEBUG_CONNECTIONS) devops.dump_stats(); +end: close_network_connections(); -end: - exit_control(); - -end_nonet: logger(DEBUG_ALWAYS, LOG_NOTICE, "Terminating"); free(priority);