diff --git a/src/net/listen.c b/src/net/listen.c
index 6a6ab647f9c616e287f69e9dfe0ebedbcb04fbf0..91a9973a6cda0841b1ae5374c38f87db87585b10 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -81,8 +81,10 @@ void
 lkt_state_send(struct lkt_state *srv, size_t c, struct lkt_message *msg)
 {
     struct lkt_client *cli = &srv->clients[c - 1];
-    RETURN_IF(cli->buffer_out_len >= BUFFER_OUT_MAX, "Cannot send message to "
-              "client, buffer_out is full", NOTHING);
+    if (cli->buffer_out_len >= BUFFER_OUT_MAX) {
+        LOG_ERROR("NETWORK", "buffer_out is full for client %ld", c);
+        return;
+    }
     cli->buffer_out[cli->buffer_out_len++] = msg;
     srv->fds[c].events |= POLLOUT;
 }
@@ -425,6 +427,7 @@ handle_disconnected_client(struct lkt_state *srv, size_t c)
     struct lkt_client *cli = &srv->clients[c - 1];
     for (size_t i = 0; i < cli->buffer_out_len; i++)
         lkt_message_free(cli->buffer_out[i]);
+    LOG_WARN("NETWORK", "Cleaned %d messages for the client %ld", cli->buffer_out_len, c);
     cli->buffer_out_len = 0;
 }
 
@@ -444,8 +447,7 @@ handle_outgoing_data(struct lkt_state *srv, size_t c)
                 return 0;
             }
             if (errno == EPIPE) {
-                LOG_WARN("NETWORK", "Client %ld is out, free all its "
-                         "messages", c);
+                LOG_WARN("NETWORK", "Client %ld is out, free all its messages", c);
                 handle_disconnected_client(srv, i);
             }
             return -1;
@@ -704,6 +706,7 @@ handle_network_events(struct lkt_state *srv)
             handle_outgoing_data(srv, i);
             close(srv->fds[i].fd);
             srv->fds[i].fd = -1;
+            handle_disconnected_client(srv, i);
         }
     }