mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 12:41:00 +02:00
MINOR: mux-quic/h3: prepare CONNECTION_CLOSE on release
When MUX is released, a CONNECTION_CLOSE frame should be emitted. This will ensure that the client does not use anymore a half-dead connection. App protocol layer is responsible to provide the error code via release callback. For HTTP/3 NO_ERROR is used as specified in RFC 9114. If no release callback is provided, generic QUIC NO_ERROR code is used. Note that a graceful shutdown is used : quic_conn must emit CONNECTION_CLOSE frame when possible. This will be provided in another patch. This change should limit the risk of browsers stuck on webpage loading if MUX has been released. On CONNECTION_CLOSE reception, the client will reopen a new QUIC connection.
This commit is contained in:
parent
d666d740d2
commit
069288b4c0
9
src/h3.c
9
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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user