diff --git a/components/esp_http_server/src/httpd_ws.c b/components/esp_http_server/src/httpd_ws.c index eb75e79c2a..b91e28584c 100644 --- a/components/esp_http_server/src/httpd_ws.c +++ b/components/esp_http_server/src/httpd_ws.c @@ -250,15 +250,19 @@ esp_err_t httpd_ws_recv_frame(httpd_req_t *req, httpd_ws_frame_t *frame, size_t return ESP_FAIL; } - int read_len = 0, left_len = frame->len; + size_t left_len = frame->len; + size_t offset = 0; + while (left_len > 0) { - if ((read_len = httpd_recv_with_opt(req, (char *)frame->payload + read_len, left_len, false)) <= 0) { + int read_len = httpd_recv_with_opt(req, (char *)frame->payload + offset, left_len, false); + if (read_len <= 0) { ESP_LOGW(TAG, LOG_FMT("Failed to receive payload")); return ESP_FAIL; } - if (left_len -= read_len) { - ESP_LOGD(TAG, "recv data length is less than the data length we want. Read again!"); - } + offset += read_len; + left_len -= read_len; + + ESP_LOGD(TAG, "Frame length: %d, Bytes Read: %d", frame->len, offset); } /* Unmask payload */