diff --git a/src/h3.c b/src/h3.c index 1991e9cfc..60b8673c1 100644 --- a/src/h3.c +++ b/src/h3.c @@ -1866,6 +1866,8 @@ static int h3_resp_data_send(struct qcs *qcs, struct htx *htx, static size_t h3_snd_buf(struct qcs *qcs, struct buffer *buf, size_t count) { + struct h3s *h3s = qcs->ctx; + struct h3c *h3c = h3s->h3c; size_t total = 0; enum htx_blk_type btype; struct htx *htx; @@ -1878,7 +1880,9 @@ static size_t h3_snd_buf(struct qcs *qcs, struct buffer *buf, size_t count) htx = htx_from_buf(buf); - while (count && !htx_is_empty(htx) && !(qcs->flags & QC_SF_BLK_MROOM)) { + while (count && !htx_is_empty(htx) && + !(qcs->flags & QC_SF_BLK_MROOM) && !h3c->err) { + idx = htx_get_head(htx); blk = htx_get_blk(htx, idx); btype = htx_get_blk_type(blk); @@ -1931,6 +1935,12 @@ static size_t h3_snd_buf(struct qcs *qcs, struct buffer *buf, size_t count) } } + /* Interrupt sending on connection error. */ + if (unlikely(h3c->err)) { + qcc_set_error(qcs->qcc, h3c->err, 1); + goto out; + } + /* RFC 9114 4.1. HTTP Message Framing * * A server can send a complete response prior to the client sending an