]> git.kaiwu.me - nginx.git/commitdiff
Increased default initial retransmit timeout.
authorVladimir Homutov <vl@nginx.com>
Wed, 10 Jun 2020 18:33:20 +0000 (21:33 +0300)
committerVladimir Homutov <vl@nginx.com>
Wed, 10 Jun 2020 18:33:20 +0000 (21:33 +0300)
This is a temporary workaround, proper retransmission mechanism based on
quic-recovery rfc draft is yet to be implemented.

Currently hardcoded value is too small for real networks.  The patch
sets static PTO, considering rtt of ~333ms, what gives about 1s.

src/event/ngx_event_quic.c

index 11895d4e62772e60939810cd8e53589469bbb6b0..56cf9d06f3eecb04f35e48e7bd595bfbc3e037d8 100644 (file)
@@ -3058,7 +3058,8 @@ ngx_quic_output(ngx_connection_t *c)
     }
 
     if (!qc->retransmit.timer_set && !qc->closing) {
-        ngx_add_timer(&qc->retransmit, qc->ctp.max_ack_delay);
+        ngx_add_timer(&qc->retransmit,
+                              qc->ctp.max_ack_delay + NGX_QUIC_HARDCODED_PTO);
     }
 
     return NGX_OK;
@@ -3414,7 +3415,8 @@ ngx_quic_retransmit(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx,
     do {
         start = ngx_queue_data(q, ngx_quic_frame_t, queue);
 
-        wait = start->last + qc->ctp.max_ack_delay - now;
+        wait = start->last + qc->ctp.max_ack_delay
+               + NGX_QUIC_HARDCODED_PTO - now;
 
         if ((ngx_msec_int_t) wait > 0) {
             break;
@@ -3455,7 +3457,7 @@ ngx_quic_retransmit(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx,
         /* move frames group to the end of queue */
         ngx_queue_add(&ctx->sent, &range);
 
-        wait = qc->tp.max_ack_delay;
+        wait = qc->ctp.max_ack_delay + NGX_QUIC_HARDCODED_PTO;
 
     } while (q != ngx_queue_sentinel(&ctx->sent));