if (r > 0)
wr->readed += r;
- if (wr->readed < sizeof(msg->length))
- continue;
-
- if (wr->readed < msg->length)
- continue;
+ /* The socket is SOCK_STREAM (see `listen_fd_create`), so one message
+ * could be split into chunks returned across multiple read() calls. */
+ if (wr->readed < sizeof(msg->length)
+ || wr->readed < msg->length)
+ goto dont_process_yet_and_read_more_data;
assert(wr->service_socket);
r = wr->service_socket(server, wr, msg);
if (r <= 0)
return r;
+dont_process_yet_and_read_more_data:
r = read(wr->fd_entity.fd, wr->buffer + wr->readed, sizeof wr->buffer - wr->readed);
} while (r > 0 || ((wr->readed >= sizeof(msg->length) && wr->readed >= msg->length)));