From edc2c75c75daaa3eb940efd9c5ce535826c8b090 Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Thu, 18 Feb 2021 12:22:28 +0300 Subject: QUIC: set idle timer when sending an ack-eliciting packet. As per quic-transport-34: An endpoint also restarts its idle timer when sending an ack-eliciting packet if no other ack-eliciting packets have been sent since last receiving and processing a packet. Previously, the timer was set for any packet. --- src/event/quic/ngx_event_quic.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c index f99b0f854..0484909cf 100644 --- a/src/event/quic/ngx_event_quic.c +++ b/src/event/quic/ngx_event_quic.c @@ -4948,17 +4948,21 @@ static ngx_int_t ngx_quic_output(ngx_connection_t *c) { off_t max; - size_t len, min; + size_t len, min, in_flight; ssize_t n; u_char *p; ngx_uint_t i, pad; ngx_quic_send_ctx_t *ctx; + ngx_quic_congestion_t *cg; ngx_quic_connection_t *qc; static u_char dst[NGX_QUIC_MAX_UDP_PAYLOAD_SIZE]; c->log->action = "sending frames"; qc = ngx_quic_get_connection(c); + cg = &qc->congestion; + + in_flight = cg->in_flight; for ( ;; ) { p = dst; @@ -5003,11 +5007,11 @@ ngx_quic_output(ngx_connection_t *c) if (n == NGX_ERROR) { return NGX_ERROR; } + } - if (!qc->send_timer_set && !qc->closing) { - qc->send_timer_set = 1; - ngx_add_timer(c->read, qc->tp.max_idle_timeout); - } + if (in_flight != cg->in_flight && !qc->send_timer_set && !qc->closing) { + qc->send_timer_set = 1; + ngx_add_timer(c->read, qc->tp.max_idle_timeout); } ngx_quic_set_lost_timer(c); -- cgit