Fixes: #11851
The civetweb mg_write() doesn't return error when it can't flush all data
to the user, it just sends the total number of bytes written. Modified the
client io to return total number of bytes and return an error if didn't
send anything.
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
{
if (!header_done) {
header_data.append(buf, len);
- return 0;
+ return len;
}
if (!sent_header) {
data.append(buf, len);
- return 0;
+ return len;
+ }
+ int r = mg_write(conn, buf, len);
+ if (r == 0) {
+ /* didn't send anything, error out */
+ return -EIO;
}
- return mg_write(conn, buf, len);
+ return r;
}
RGWMongoose::RGWMongoose(mg_connection *_conn, int _port) : conn(_conn), port(_port), header_done(false), sent_header(false), has_content_length(false),
return ret;
if (account)
- bytes_sent += len;
+ bytes_sent += ret;
+
+ if (ret < len) {
+ /* sent less than tried to send, error out */
+ return -EIO;
+ }
return 0;
}