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.
This commit is contained in:
Roman Arutyunyan 2021-02-18 12:22:28 +03:00
parent e0425791d4
commit edc2c75c75

View File

@ -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,12 +5007,12 @@ ngx_quic_output(ngx_connection_t *c)
if (n == NGX_ERROR) {
return NGX_ERROR;
}
}
if (!qc->send_timer_set && !qc->closing) {
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);