]> git.meshlink.io Git - meshlink/blobdiff - src/net_socket.c
Revert "Dont setup outgoing connection to blacklisted nodes"
[meshlink] / src / net_socket.c
index 4ef7eb0c9aa0ebaf6ccaa16411d67c41bfe38c79..3cbc5dd634fa2d60d302daab5a0959b9c16d9b17 100644 (file)
@@ -43,8 +43,6 @@ int max_connection_burst = 100;
 /* Setup sockets */
 
 static void configure_tcp(connection_t *c) {
-       int option;
-
 #ifdef O_NONBLOCK
        int flags = fcntl(c->socket, F_GETFL);
 
@@ -102,7 +100,6 @@ int setup_listen_socket(const sockaddr_t *sa) {
        int nfd;
        char *addrstr;
        int option;
-       char *iface;
 
        nfd = socket(sa->sa.sa_family, SOCK_STREAM, IPPROTO_TCP);
 
@@ -255,7 +252,7 @@ void finish_connecting(meshlink_handle_t *mesh, connection_t *c) {
        c->last_ping_time = mesh->loop.now.tv_sec;
        c->status.connecting = false;
 
-       send_id(c);
+       send_id(mesh, c);
 }
 
 static void do_outgoing_pipe(meshlink_handle_t *mesh, connection_t *c, char *command) {
@@ -319,7 +316,7 @@ static void handle_meta_write(meshlink_handle_t *mesh, connection_t *c) {
                        logger(DEBUG_CONNECTIONS, LOG_ERR, "Could not send %d bytes of data to %s (%s): %s", c->outbuf.len - c->outbuf.offset, c->name, c->hostname, strerror(errno));
                }
 
-               terminate_connection(c, c->status.active);
+               terminate_connection(mesh, c, c->status.active);
                return;
        }
 
@@ -343,7 +340,7 @@ static void handle_meta_io(event_loop_t *loop, void *data, int flags) {
                        finish_connecting(mesh, c);
                else {
                        logger(DEBUG_CONNECTIONS, LOG_DEBUG, "Error while connecting to %s (%s): %s", c->name, c->hostname, sockstrerror(result));
-                       terminate_connection(c, false);
+                       terminate_connection(mesh, c, false);
                        return;
                }
        }
@@ -351,7 +348,7 @@ static void handle_meta_io(event_loop_t *loop, void *data, int flags) {
        if(flags & IO_WRITE)
                handle_meta_write(mesh, c);
        else
-               handle_meta_connection_data(c);
+               handle_meta_connection_data(mesh, c);
 }
 
 bool do_outgoing_connection(meshlink_handle_t *mesh, outgoing_t *outgoing) {
@@ -465,7 +462,7 @@ begin:
        c->outcompression = mesh->self->connection->outcompression;
        c->last_ping_time = mesh->loop.now.tv_sec;
 
-       connection_add(c);
+       connection_add(mesh, c);
 
        io_add(&mesh->loop, &c->io, handle_meta_io, c, c->socket, IO_READ|IO_WRITE);
 
@@ -508,7 +505,7 @@ static struct addrinfo *get_known_addresses(node_t *n) {
 void setup_outgoing_connection(meshlink_handle_t *mesh, outgoing_t *outgoing) {
        timeout_del(&mesh->loop, &outgoing->ev);
 
-       node_t *n = lookup_node(outgoing->name);
+       node_t *n = lookup_node(mesh, outgoing->name);
 
        if(n && n->connection) {
                logger(DEBUG_CONNECTIONS, LOG_INFO, "Already connected to %s", outgoing->name);
@@ -548,6 +545,11 @@ void handle_new_meta_connection(event_loop_t *loop, void *data, int flags) {
        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;
        }
@@ -620,10 +622,10 @@ void handle_new_meta_connection(event_loop_t *loop, void *data, int flags) {
 
        configure_tcp(c);
 
-       connection_add(c);
+       connection_add(mesh, c);
 
        c->allow_request = ID;
-       send_id(c);
+       send_id(mesh, c);
 }
 
 static void free_outgoing(meshlink_handle_t *mesh, outgoing_t *outgoing) {
@@ -690,7 +692,7 @@ void try_outgoing_connections(meshlink_handle_t *mesh) {
                if(c->outgoing && c->outgoing->timeout == -1) {
                        c->outgoing = NULL;
                        logger(DEBUG_CONNECTIONS, LOG_INFO, "No more outgoing connection to %s", c->name);
-                       terminate_connection(c, c->status.active);
+                       terminate_connection(mesh, c, c->status.active);
                }
        }