From 23c3dc20c18797ffd2eb1112b5021662efc51337 Mon Sep 17 00:00:00 2001 From: trrui-huawei Date: Fri, 11 Aug 2023 14:14:11 +0800 Subject: [PATCH] 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 --- lib/vquic/curl_quiche.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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) {