out_close:
        mutex_unlock(&con->sock_mutex);
        if (ret != -EAGAIN) {
-               close_connection(con, true, true, false);
+               close_connection(con, false, true, false);
                /* Reconnect when there is something to send */
        }
        /* Don't return success if we really got EOF */
                        INIT_WORK(&othercon->swork, process_send_sockets);
                        INIT_WORK(&othercon->rwork, process_recv_sockets);
                        set_bit(CF_IS_OTHERCON, &othercon->flags);
+               } else {
+                       /* close other sock con if we have something new */
+                       close_connection(othercon, false, true, false);
                }
+
                mutex_lock_nested(&othercon->sock_mutex, 2);
-               if (!othercon->sock) {
-                       newcon->othercon = othercon;
-                       add_sock(newsock, othercon);
-                       addcon = othercon;
-                       mutex_unlock(&othercon->sock_mutex);
-               }
-               else {
-                       printk("Extra connection from node %d attempted\n", nodeid);
-                       result = -EAGAIN;
-                       mutex_unlock(&othercon->sock_mutex);
-                       mutex_unlock(&newcon->sock_mutex);
-                       goto accept_err;
-               }
+               newcon->othercon = othercon;
+               add_sock(newsock, othercon);
+               addcon = othercon;
+               mutex_unlock(&othercon->sock_mutex);
        }
        else {
                newcon->rx_action = receive_from_sock;
 
 send_error:
        mutex_unlock(&con->sock_mutex);
-       close_connection(con, true, false, true);
+       close_connection(con, false, false, true);
        /* Requeue the send work. When the work daemon runs again, it will try
           a new connection, then call this function again. */
        queue_work(send_workqueue, &con->swork);