#endif
#if defined(SOL_TCP) && defined(TCP_NODELAY)
- option = 1;
- setsockopt(c->socket, SOL_TCP, TCP_NODELAY, (void *)&option, sizeof option);
+ int nodelay = 1;
+ setsockopt(c->socket, SOL_TCP, TCP_NODELAY, (void *)&nodelay, sizeof nodelay);
#endif
#if defined(SOL_IP) && defined(IP_TOS) && defined(IPTOS_LOWDELAY)
- option = IPTOS_LOWDELAY;
- setsockopt(c->socket, SOL_IP, IP_TOS, (void *)&option, sizeof option);
+ int lowdelay = IPTOS_LOWDELAY;
+ setsockopt(c->socket, SOL_IP, IP_TOS, (void *)&lowdelay, sizeof lowdelay);
#endif
}
}
void setup_outgoing_connection(meshlink_handle_t *mesh, outgoing_t *outgoing) {
+ bool blacklisted = false;
timeout_del(&mesh->loop, &outgoing->ev);
node_t *n = lookup_node(mesh, outgoing->name);
read_host_config(mesh, outgoing->config_tree, outgoing->name);
outgoing->cfg = lookup_config(outgoing->config_tree, "Address");
+ get_config_bool(lookup_config(outgoing->config_tree, "blacklisted"), &blacklisted);
+ if (blacklisted) return;
+
if(!outgoing->cfg) {
if(n)
outgoing->aip = outgoing->ai = get_known_addresses(n);
fd = accept(l->tcp.fd, &sa.sa, &len);
if(fd < 0) {
+ if(errno == EINVAL) { // TODO: check if Windows agrees
+ event_loop_stop(loop);
+ return;
+ }
+
logger(DEBUG_ALWAYS, LOG_ERR, "Accepting a new connection failed: %s", sockstrerror(sockerrno));
return;
}
send_id(mesh, c);
}
-static void free_outgoing(meshlink_handle_t *mesh, outgoing_t *outgoing) {
+static void free_outgoing(outgoing_t *outgoing) {
+ meshlink_handle_t *mesh = outgoing->mesh;
+
timeout_del(&mesh->loop, &outgoing->ev);
if(outgoing->ai)
if(!found) {
outgoing_t *outgoing = xzalloc(sizeof *outgoing);
+ outgoing->mesh = mesh;
outgoing->name = name;
list_insert_tail(mesh->outgoings, outgoing);
setup_outgoing_connection(mesh, outgoing);