]> git.meshlink.io Git - meshlink/blobdiff - src/net_socket.c
Implemented meshlink_blacklist feature
[meshlink] / src / net_socket.c
index 160195455b450a9e1f1dc158df064bcf5a8a013c..2ddf837b0a357589df87b280ccb9c512dfa6880b 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);
 
@@ -506,6 +503,7 @@ static struct addrinfo *get_known_addresses(node_t *n) {
 }
 
 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);
@@ -521,6 +519,9 @@ void setup_outgoing_connection(meshlink_handle_t *mesh, outgoing_t *outgoing) {
        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);
@@ -548,6 +549,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;
        }