int i, err;
int replaywin_int;
+ if(!(name = get_name())) {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Name for tinc daemon required!");
+ return false;
+ }
+
myself = new_node();
myself->connection = new_connection();
+ myself->name = name;
+ myself->connection->name = xstrdup(name);
+ xasprintf(&fname, "%s" SLASH "hosts" SLASH "%s", confbase, name);
+ read_config_options(config_tree, name);
+ read_config_file(config_tree, fname);
+ free(fname);
if(!get_config_string(lookup_config(config_tree, "Port"), &myport))
myport = xstrdup("655");
myself->options |= PROT_MINOR << 24;
- if(!(name = get_name())) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Name for tinc daemon required!");
- return false;
- }
-
- myself->name = name;
- myself->connection->name = xstrdup(name);
- xasprintf(&fname, "%s" SLASH "hosts" SLASH "%s", confbase, name);
- read_config_options(config_tree, name);
- read_config_file(config_tree, fname);
- free(fname);
-
get_config_bool(lookup_config(config_tree, "ExperimentalProtocol"), &experimental);
if(experimental && !read_ecdsa_private_key())
for(node = connection_tree->head; node; node = next) {
next = node->next;
c = node->data;
+ /* Keep control connections open until the end, so they know when we really terminated */
+ if(c->status.control)
+ c->socket = -1;
c->outgoing = NULL;
terminate_connection(c, false);
}