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); } }