From: Guus Sliepen Date: Mon, 13 Jul 2020 20:31:46 +0000 (+0200) Subject: Fix outgoing connection attempts after local discovery. X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=244c5cd1dba4efdfd54aee505baaccf050900c07;p=meshlink Fix outgoing connection attempts after local discovery. We were trying the wrong port due to a forgotten byteswap. Also, if no address was known at all for a node, there might be an outgoing structure for it that would never be retried. --- diff --git a/src/discovery.c b/src/discovery.c index 148656ac..6fec9a24 100644 --- a/src/discovery.c +++ b/src/discovery.c @@ -248,11 +248,11 @@ static void mdns_io_handler(event_loop_t *loop, void *data, int flags) { switch(sa.sa.sa_family) { case AF_INET: - sa.in.sin_port = port; + sa.in.sin_port = htons(port); break; case AF_INET6: - sa.in6.sin6_port = port; + sa.in6.sin6_port = htons(port); break; default: @@ -263,20 +263,25 @@ static void mdns_io_handler(event_loop_t *loop, void *data, int flags) { if(sa.sa.sa_family != AF_UNKNOWN) { n->catta_address = sa; + n->last_connect_try = 0; node_add_recent_address(mesh, n, &sa); - connection_t *c = n->connection; + if(n->connection) { + n->connection->last_ping_time = -3600; + } + + for list_each(outgoing_t, outgoing, mesh->outgoings) { + if(outgoing->node != n) { + continue; + } - if(c && c->outgoing && !c->status.active) { - c->outgoing->timeout = 0; + outgoing->timeout = 0; - if(c->outgoing->ev.cb) { - timeout_set(&mesh->loop, &c->outgoing->ev, &(struct timespec) { + if(outgoing->ev.cb) { + timeout_set(&mesh->loop, &outgoing->ev, &(struct timespec) { 0, 0 }); } - - c->last_ping_time = -3600; } } } diff --git a/src/net_socket.c b/src/net_socket.c index abf6a7cf..9bd00bcc 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -378,6 +378,7 @@ begin: /* We are waiting for a callback from the ADNS thread */ } else if(outgoing->state == OUTGOING_NO_KNOWN_ADDRESSES) { logger(mesh, MESHLINK_ERROR, "No known addresses for %s", outgoing->node->name); + list_delete(mesh->outgoings, outgoing); } else { logger(mesh, MESHLINK_ERROR, "Could not set up a meta connection to %s", outgoing->node->name); retry_outgoing(mesh, outgoing);