From: trrui-huawei Date: Fri, 11 Aug 2023 06:14:11 +0000 (+0800) Subject: quiche: enable quiche to handle timeout events X-Git-Tag: curl-8_3_0~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=23c3dc20c18797ffd2eb1112b5021662efc51337;p=thirdparty%2Fcurl.git quiche: enable quiche to handle timeout events In parallel with ngtcp2, quiche also offers the `quiche_conn_on_timeout` interface for the application to invoke upon timer expiration. Therefore, invoking the `on_timeout` function of the Connection is crucial to ensure seamless functionality of quiche with timeout events. Closes #11654 --- diff --git a/lib/vquic/curl_quiche.c b/lib/vquic/curl_quiche.c index 298439a247..bbb069096e 100644 --- a/lib/vquic/curl_quiche.c +++ b/lib/vquic/curl_quiche.c @@ -747,10 +747,20 @@ static CURLcode cf_flush_egress(struct Curl_cfilter *cf, struct cf_quiche_ctx *ctx = cf->ctx; ssize_t nread; CURLcode result; + int64_t expiry_ns; int64_t timeout_ns; struct read_ctx readx; size_t pkt_count, gsolen; + expiry_ns = quiche_conn_timeout_as_nanos(ctx->qconn); + if(!expiry_ns) { + quiche_conn_on_timeout(ctx->qconn); + if(quiche_conn_is_closed(ctx->qconn)) { + failf(data, "quiche_conn_on_timeout closed the connection"); + return CURLE_SEND_ERROR; + } + } + result = vquic_flush(cf, data, &ctx->q); if(result) { if(result == CURLE_AGAIN) {