server : handle unsuccessful sink.write in chunked stream provider (#21478)
Check the return value of sink.write() in the chunked content provider and return false when the write fails, matching cpp-httplib's own streaming contract. This prevents logging chunks as sent when the sink rejected them and properly aborts the stream on connection failure.
This commit is contained in:
@@ -397,8 +397,9 @@ static void process_handler_response(server_http_req_ptr && request, server_http
|
|||||||
std::string chunk;
|
std::string chunk;
|
||||||
bool has_next = response->next(chunk);
|
bool has_next = response->next(chunk);
|
||||||
if (!chunk.empty()) {
|
if (!chunk.empty()) {
|
||||||
// TODO: maybe handle sink.write unsuccessful? for now, we rely on is_connection_closed()
|
if (!sink.write(chunk.data(), chunk.size())) {
|
||||||
sink.write(chunk.data(), chunk.size());
|
return false;
|
||||||
|
}
|
||||||
SRV_DBG("http: streamed chunk: %s\n", chunk.c_str());
|
SRV_DBG("http: streamed chunk: %s\n", chunk.c_str());
|
||||||
}
|
}
|
||||||
if (!has_next) {
|
if (!has_next) {
|
||||||
|
|||||||
Reference in New Issue
Block a user