aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-09-08 15:54:02 +0300
committerRoman Arutyunyan <arut@nginx.com>2020-09-08 15:54:02 +0300
commitf3bed9cd67ee6333b7d0db121f96451c0bcf4686 (patch)
treeb0766ae6a222ddbdfb0ea40f55de857ca0ba7bf7 /src
parent786a74e34ec89d0e78b95f2524dff68bf6235923 (diff)
downloadnginx-f3bed9cd67ee6333b7d0db121f96451c0bcf4686.tar.gz
nginx-f3bed9cd67ee6333b7d0db121f96451c0bcf4686.zip
QUIC: eliminated idle timeout restart for dropped packets.
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_quic.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index 66a4e7501..336888787 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -866,7 +866,15 @@ ngx_quic_new_connection(ngx_connection_t *c, ngx_ssl_t *ssl,
(void) ngx_quic_skip_zero_padding(pkt->raw);
- return ngx_quic_input(c, pkt->raw);
+ rc = ngx_quic_input(c, pkt->raw);
+
+ if (rc == NGX_ERROR) {
+ return NGX_ERROR;
+ }
+
+ /* rc == NGX_OK || rc == NGX_DECLINED */
+
+ return NGX_OK;
}
@@ -1290,6 +1298,7 @@ static void
ngx_quic_input_handler(ngx_event_t *rev)
{
ssize_t n;
+ ngx_int_t rc;
ngx_buf_t b;
ngx_connection_t *c;
ngx_quic_connection_t *qc;
@@ -1337,11 +1346,19 @@ ngx_quic_input_handler(ngx_event_t *rev)
b.last += n;
qc->received += n;
- if (ngx_quic_input(c, &b) != NGX_OK) {
+ rc = ngx_quic_input(c, &b);
+
+ if (rc == NGX_ERROR) {
ngx_quic_close_connection(c, NGX_ERROR);
return;
}
+ if (rc == NGX_DECLINED) {
+ return;
+ }
+
+ /* rc == NGX_OK */
+
qc->send_timer_set = 0;
ngx_add_timer(rev, qc->tp.max_idle_timeout);
}
@@ -1597,8 +1614,11 @@ ngx_quic_input(ngx_connection_t *c, ngx_buf_t *b)
{
u_char *p;
ngx_int_t rc;
+ ngx_uint_t good;
ngx_quic_header_t pkt;
+ good = 0;
+
p = b->pos;
while (p < b->last) {
@@ -1639,6 +1659,10 @@ ngx_quic_input(ngx_connection_t *c, ngx_buf_t *b)
return NGX_ERROR;
}
+ if (rc == NGX_OK) {
+ good = 1;
+ }
+
/* NGX_OK || NGX_DECLINED */
/*
@@ -1663,7 +1687,7 @@ ngx_quic_input(ngx_connection_t *c, ngx_buf_t *b)
p = ngx_quic_skip_zero_padding(b);
}
- return NGX_OK;
+ return good ? NGX_OK : NGX_DECLINED;
}