@@ -128,9 +128,13 @@ namespace crow
128128 {
129129 continue_requested = true ;
130130 buffers_.clear ();
131- static std::string expect_100_continue = " HTTP/1.1 100 Continue\r\n\r\n " ;
131+ static const std::string expect_100_continue = " HTTP/1.1 100 Continue\r\n\r\n " ;
132132 buffers_.emplace_back (expect_100_continue.data (), expect_100_continue.size ());
133- do_write_sync (buffers_);
133+ error_code ec = do_write_sync (buffers_);
134+ if (ec)
135+ {
136+ CROW_LOG_ERROR << ec << " buffer write error happened while handling sending continuation buffer header" ;
137+ }
134138 }
135139 }
136140
@@ -299,7 +303,12 @@ namespace crow
299303 while (is.gcount () > 0 )
300304 {
301305 buffers[0 ] = asio::buffer (buf, is.gcount ());
302- do_write_sync (buffers);
306+ error_code ec = do_write_sync (buffers);
307+ if (ec) {
308+ CROW_LOG_ERROR << ec << " - buffer write error happened while sending content of file "
309+ << res.file_info .path << " . Writing stopped premature." ;
310+ break ;
311+ }
303312 is.read (buf, sizeof (buf));
304313 }
305314 }
@@ -318,13 +327,16 @@ namespace crow
318327
319328 void do_write_general ()
320329 {
330+ error_code ec;
321331 if (res.body .length () < res_stream_threshold_)
322332 {
323333 res_body_copy_.swap (res.body );
324334 buffers_.emplace_back (res_body_copy_.data (), res_body_copy_.size ());
325335
326- do_write_sync (buffers_);
327-
336+ ec = do_write_sync (buffers_);
337+ if (ec) {
338+ CROW_LOG_ERROR << ec << " - buffer write error happened while sending response. Writing stopped premature." ;
339+ }
328340 if (need_to_start_read_after_complete_)
329341 {
330342 need_to_start_read_after_complete_ = false ;
@@ -334,7 +346,10 @@ namespace crow
334346 }
335347 else
336348 {
337- asio::write (adaptor_.socket (), buffers_); // Write the response start / headers
349+ asio::write (adaptor_.socket (), buffers_,ec); // Write the response start / headers
350+ if (ec) {
351+ CROW_LOG_ERROR << ec << " - buffer write error happened while sending response start / headers. Writing stopped premature." ;
352+ }
338353 cancel_deadline_timer ();
339354 if (res.body .length () > 0 )
340355 {
@@ -345,7 +360,11 @@ namespace crow
345360 {
346361 size_t to_transfer = CROW_MIN (16384UL , length - transferred);
347362 buffers[0 ] = asio::const_buffer (data + transferred, to_transfer);
348- do_write_sync (buffers);
363+ ec = do_write_sync (buffers);
364+ if (ec) {
365+ CROW_LOG_ERROR << ec << " - " << transferred << " - buffer write error happened while sending response. Writing stopped premature." ;
366+ break ;
367+ }
349368 transferred += to_transfer;
350369 }
351370 }
@@ -439,10 +458,15 @@ namespace crow
439458 });
440459 }
441460
442- inline void do_write_sync (std::vector<asio::const_buffer>& buffers)
461+ inline error_code do_write_sync (std::vector<asio::const_buffer>& buffers)
443462 {
444463 error_code ec;
445464 asio::write (adaptor_.socket (), buffers, ec);
465+ if (ec)
466+ {
467+ // CROW_LOG_ERROR << ec << " - happened while sending buffers";
468+ CROW_LOG_DEBUG << this << " from write (sync)(2)" ;
469+ }
446470
447471 this ->res .clear ();
448472 this ->res_body_copy_ .clear ();
@@ -455,11 +479,7 @@ namespace crow
455479 this ->parser_ .clear ();
456480 }
457481
458- if (ec)
459- {
460- CROW_LOG_ERROR << ec << " - happened while sending buffers" ;
461- CROW_LOG_DEBUG << this << " from write (sync)(2)" ;
462- }
482+ return ec;
463483 }
464484
465485 void cancel_deadline_timer ()
0 commit comments