Mercurial > hg > nginx
changeset 8708:98bacfc65c61 quic
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.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Thu, 18 Feb 2021 12:22:28 +0300 |
parents | ffcaf0aad9f2 |
children | 81bb3a690c10 |
files | src/event/quic/ngx_event_quic.c |
diffstat | 1 files changed, 10 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic.c Wed Feb 17 11:58:32 2021 +0300 +++ b/src/event/quic/ngx_event_quic.c Thu Feb 18 12:22:28 2021 +0300 @@ -4948,17 +4948,21 @@ 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 @@ 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);