Add support for multicast communication with UML/QEMU/KVM.
[tinc] / src / net.c
index 6979083..327bdd3 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -204,18 +204,14 @@ void terminate_connection(connection_t *c, bool report) {
                }
        }
 
+       free_connection_partially(c);
+
        /* Check if this was our outgoing connection */
 
        if(c->outgoing) {
-               retry_outgoing(c->outgoing);
-               c->outgoing = NULL;
+               c->status.remove = false;
+               do_outgoing_connection(c);      
        }
-
-       free(c->outbuf);
-       c->outbuf = NULL;
-       c->outbuflen = 0;
-       c->outbufsize = 0;
-       c->outbufstart = 0;
 }
 
 /*
@@ -290,9 +286,11 @@ static void check_network_activity(fd_set * readset, fd_set * writeset) {
        /* check input from kernel */
        if(device_fd >= 0 && FD_ISSET(device_fd, readset)) {
                if(devops.read(&packet)) {
-                       errors = 0;
-                       packet.priority = 0;
-                       route(myself, &packet);
+                       if(packet.len) {
+                               errors = 0;
+                               packet.priority = 0;
+                               route(myself, &packet);
+                       }
                } else {
                        usleep(errors * 50000);
                        errors++;