[PATCH 02 of 10] QUIC: made ngx_quic_finalize_connecion() more graceful
Roman Arutyunyan
arut at nginx.com
Thu Sep 8 09:06:29 UTC 2022
# HG changeset patch
# User Roman Arutyunyan <arut at nginx.com>
# Date 1661167731 -14400
# Mon Aug 22 15:28:51 2022 +0400
# Branch quic
# Node ID a3be42d42e7e6e6a941adb458cab201ff2cce8ce
# Parent 48645c5397a3f178286bcd108748c140adccc8a5
QUIC: made ngx_quic_finalize_connecion() more graceful.
Previously, ngx_quic_finalize_connection() closed the connection with NGX_ERROR
code, which resulted in immediate connection closure. Now the code is NGX_OK,
which provides a more graceful shutdown with a timeout.
diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c
--- a/src/event/quic/ngx_event_quic.c
+++ b/src/event/quic/ngx_event_quic.c
@@ -414,6 +414,7 @@ ngx_quic_input_handler(ngx_event_t *rev)
}
if (c->close) {
+ qc->error = NGX_QUIC_ERR_NO_ERROR;
qc->error_reason = "graceful shutdown";
ngx_quic_close_connection(c, NGX_OK);
return;
@@ -506,31 +507,26 @@ ngx_quic_close_connection(ngx_connection
qc->error_level = c->ssl ? SSL_quic_read_level(c->ssl->connection)
: ssl_encryption_initial;
+ if (qc->error == (ngx_uint_t) -1) {
+ qc->error = NGX_QUIC_ERR_INTERNAL_ERROR;
+ qc->error_app = 0;
+ }
+
+ ngx_log_debug5(NGX_LOG_DEBUG_EVENT, c->log, 0,
+ "quic close immediate term:%d drain:%d "
+ "%serror:%ui \"%s\"",
+ rc == NGX_ERROR ? 1 : 0, qc->draining,
+ qc->error_app ? "app " : "", qc->error,
+ qc->error_reason ? qc->error_reason : "");
+
if (rc == NGX_OK) {
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
- "quic close immediate drain:%d",
- qc->draining);
-
qc->close.log = c->log;
qc->close.data = c;
qc->close.handler = ngx_quic_close_timer_handler;
qc->close.cancelable = 1;
ctx = ngx_quic_get_send_ctx(qc, qc->error_level);
-
ngx_add_timer(&qc->close, 3 * ngx_quic_pto(c, ctx));
-
- qc->error = NGX_QUIC_ERR_NO_ERROR;
-
- } else {
- if (qc->error == (ngx_uint_t) -1 && !qc->error_app) {
- qc->error = NGX_QUIC_ERR_INTERNAL_ERROR;
- }
-
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
- "quic close immediate due to %serror: %ui %s",
- qc->error_app ? "app " : "", qc->error,
- qc->error_reason ? qc->error_reason : "");
}
(void) ngx_quic_send_cc(c);
@@ -617,7 +613,7 @@ ngx_quic_finalize_connection(ngx_connect
qc->error_app = 1;
qc->error_ftype = 0;
- ngx_quic_close_connection(c, NGX_ERROR);
+ ngx_quic_close_connection(c, NGX_OK);
}
More information about the nginx-devel
mailing list