]> git.meshlink.io Git - meshlink/blobdiff - src/net_socket.c
Make retry outgoing logic instantaneously connect when a change is discovered on...
[meshlink] / src / net_socket.c
index 6d1d8fb386952f1e49ea12fc0d9e7ca5740efe30..143f15486ea7190aee48ddb0c08fb6cb81facba5 100644 (file)
@@ -481,14 +481,18 @@ static bool get_next_outgoing_address(meshlink_handle_t *mesh, outgoing_t *outgo
        }
 
        if(outgoing->state == OUTGOING_KNOWN) {
-               if(outgoing->aip || get_recent(mesh, outgoing)) {
-                       if(get_next_ai(mesh, outgoing)) {
-                               return true;
-                       } else {
-                               free_known_addresses(outgoing->ai);
-                               outgoing->ai = NULL;
-                               outgoing->aip = NULL;
-                       }
+               if(!outgoing->aip) {
+                       get_recent(mesh, outgoing);
+               } else {
+                       outgoing->aip = outgoing->aip->ai_next;
+               }
+
+               if(outgoing->aip) {
+                       return true;
+               } else {
+                       free_known_addresses(outgoing->ai);
+                       outgoing->ai = NULL;
+                       outgoing->aip = NULL;
                }
 
                outgoing->state = OUTGOING_END;
@@ -633,6 +637,11 @@ void setup_outgoing_connection(meshlink_handle_t *mesh, outgoing_t *outgoing) {
                return;
        }
 
+       if(mesh->connection_try_cb) {
+               node_t *n = lookup_node(mesh, outgoing->name);
+               mesh->connection_try_cb(mesh, (struct meshlink_node *)n);
+       }
+
        do_outgoing_connection(mesh, outgoing);
 }
 
@@ -661,10 +670,12 @@ void handle_new_meta_connection(event_loop_t *loop, void *data, int flags) {
        meshlink_handle_t *mesh = loop->data;
        listen_socket_t *l = data;
        connection_t *c;
-       sockaddr_t sa = {0};
+       sockaddr_t sa;
        int fd;
        socklen_t len = sizeof(sa);
 
+       memset(&sa, 0, sizeof(sa));
+
        fd = accept(l->tcp.fd, &sa.sa, &len);
 
        if(fd < 0) {