From 7f2a71f6e408a69232552dca9665bb5776be2df8 Mon Sep 17 00:00:00 2001 From: Radek Zikmund Date: Thu, 30 Nov 2023 12:35:15 +0100 Subject: [PATCH] Throw OperationCanceledException with correct CancellationToken during QuicConnection cancellation --- .../System.Net.Quic/src/System/Net/Quic/QuicConnection.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs index be4a8f8f639b00..ab0cdeac695f12 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs @@ -78,12 +78,14 @@ static async ValueTask StartConnectAsync(QuicClientConnectionOpt { await connection.FinishConnectAsync(options, linkedCts.Token).ConfigureAwait(false); } - catch (OperationCanceledException) when (!cancellationToken.IsCancellationRequested) + catch (OperationCanceledException) { - // handshake timeout elapsed, tear down the connection. - // Note that since handshake is not done yet, application error code is not sent. await connection.DisposeAsync().ConfigureAwait(false); + // throw OCE with correct token if cancellation requested by user + cancellationToken.ThrowIfCancellationRequested(); + + // cancellation by the linkedCts.CancelAfter. Convert to Timeout throw new QuicException(QuicError.ConnectionTimeout, null, SR.Format(SR.net_quic_handshake_timeout, options.HandshakeTimeout)); } catch