+ if(outgoing->ai) {
+ if(outgoing->state == OUTGOING_KNOWN) {
+ free_known_addresses(outgoing->ai);
+ } else {
+ freeaddrinfo(outgoing->ai);
+ }
+ }
+
+ outgoing->cfg = NULL;
+
+ exit_configuration(&outgoing->config_tree); // discard old configuration if present
+ init_configuration(&outgoing->config_tree);
+ read_host_config(mesh, outgoing->config_tree, outgoing->name);
+ get_config_bool(lookup_config(outgoing->config_tree, "blacklisted"), &blacklisted);
+
+ outgoing->state = OUTGOING_START;
+
+ if(blacklisted) {
+ return;
+ }
+
+ do_outgoing_connection(mesh, outgoing);
+}
+
+/// Delayed close of a filedescriptor.
+static void tarpit(int fd) {
+ static int pits[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
+ static int next_pit = 0;
+
+ if(pits[next_pit] != -1) {
+ closesocket(pits[next_pit]);
+ }
+
+ pits[next_pit++] = fd;