diff --git a/src/h3.c b/src/h3.c index 7fb5f9489..c1a997938 100644 --- a/src/h3.c +++ b/src/h3.c @@ -1121,6 +1121,15 @@ static int h3_init(struct qcc *qcc) static void h3_release(void *ctx) { struct h3c *h3c = ctx; + + /* RFC 9114 5.2. Connection Shutdown + * + * An endpoint that completes a + * graceful shutdown SHOULD use the H3_NO_ERROR error code when closing + * the connection. + */ + qcc_emit_cc_app(h3c->qcc, H3_NO_ERROR, 0); + pool_free(pool_head_h3c, h3c); } diff --git a/src/mux_quic.c b/src/mux_quic.c index 658a97437..5a0d9879e 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -1024,8 +1024,15 @@ static void qc_release(struct qcc *qcc) TRACE_ENTER(QMUX_EV_QCC_END); - if (qcc->app_ops && qcc->app_ops->release) + if (qcc->app_ops && qcc->app_ops->release) { + /* Application protocol with dedicated connection closing + * procedure. + */ qcc->app_ops->release(qcc->ctx); + } + else { + qcc_emit_cc_app(qcc, QC_ERR_NO_ERROR, 0); + } if (qcc->task) { task_destroy(qcc->task);