@@ -238,6 +238,18 @@ asio::awaitable<void> HttpStream::do_stream_session_ssl() {
238238 is_sse = true ;
239239 }
240240
241+ // async_read_header may have read body bytes past the headers into buffer.
242+ // Deliver them now so they are not lost if the first async_read_some times out.
243+ if (buffer.size () > 0 ) {
244+ auto pre = beast::buffers_to_string (buffer.data ());
245+ buffer.consume (buffer.size ());
246+ if (is_sse) {
247+ parse_sse_chunk (pre .data (), pre .size ());
248+ } else {
249+ on_data_ (pre .data (), pre .size ());
250+ }
251+ }
252+
241253 // Read body chunks continuously
242254 while (!should_close_.load (std::memory_order_acquire) &&
243255 run_.load (std::memory_order_acquire) &&
@@ -367,6 +379,18 @@ asio::awaitable<void> HttpStream::do_stream_session_plain() {
367379 is_sse = true ;
368380 }
369381
382+ // async_read_header may have read body bytes past the headers into buffer.
383+ // Deliver them now so they are not lost if the first async_read_some times out.
384+ if (buffer.size () > 0 ) {
385+ auto pre = beast::buffers_to_string (buffer.data ());
386+ buffer.consume (buffer.size ());
387+ if (is_sse) {
388+ parse_sse_chunk (pre .data (), pre .size ());
389+ } else {
390+ on_data_ (pre .data (), pre .size ());
391+ }
392+ }
393+
370394 // Read body chunks continuously
371395 while (!should_close_.load (std::memory_order_acquire) &&
372396 run_.load (std::memory_order_acquire) &&
0 commit comments