TsgcQUICClient › Ereignisse › OnQUICException
Wird ausgelöst, wenn auf der QUIC-Verbindung eine Ausnahme ausgelöst wird, sodass die Anwendung sie behandeln kann, anstatt sie zu verlieren.
property OnQUICException: TsgcQUICExceptionEvent;
// TsgcQUICExceptionEvent = procedure(Sender: TObject;
// const Connection: TsgcQUICConnection; const E: Exception) of object;
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcQUICClient-Instanz, die das Ereignis ausgelöst hat. |
Connection | const TsgcQUICConnection | Die Verbindung, auf die sich die Ausnahme bezieht. Kann nil sein, wenn der Fehler auftrat, bevor ein Verbindungsobjekt existierte. In .NET ist der Parameter ein TsgcQUICClientConnection und kann null sein. |
E | const Exception | Die ausgelöste Ausnahme. Lesen Sie E.Message für die Details. Geben Sie sie nicht frei und lösen Sie sie nicht erneut aus dem Handler heraus aus. |
OnQUICException ist die Stelle, an der die Komponente Fehler meldet, die sie abgefangen hat, anstatt sie nach außen dringen zu lassen. Verbindungsfehler sind der Hauptfall: Das Setzen von Active auf True oder der Aufruf von Connect, Start oder Stop fängt jede Ausnahme ab, markiert die Verbindung als getrennt und löst dieses Ereignis aus. Socket-Fehler auf dem zugrunde liegenden UDP-Transport treffen ebenfalls hier ein. Da diese Aufrufe die Ausnahme nicht erneut auslösen, ist die Behandlung dieses Ereignisses die einzige Möglichkeit zu erfahren, warum ein Verbindungsaufbau fehlgeschlagen ist, Connect gibt lediglich False zurück.
Typische Ursachen, die eine Protokollierung wert sind: OpenSSL konnte nicht geladen werden oder ist zu alt für QUIC, der TLS-Handshake ist fehlgeschlagen oder hat das Zeitlimit überschritten (siehe SSLQUICOptions.ConnectTimeout), die Zertifikatsprüfung wurde abgelehnt, oder der UDP-Socket konnte nicht gebunden werden.
Das Ereignis kann vom Lese-Thread der Verbindung oder vom Hintergrund-Thread ausgelöst werden, den Start und Stop verwenden. Die Komponente setzt NotifyEvents auf neNoSync, daher läuft der Handler nicht im Haupt-Thread: Greifen Sie aus ihm niemals direkt auf VCL- oder FMX-Steuerelemente zu, sondern führen Sie ein Marshalling zum Haupt-Thread durch.
oClient.OnQUICException := OnQUICExceptionEvent;
if not oClient.Connect then
Log('connect failed, see the exception handler for the reason');
procedure OnQUICExceptionEvent(Sender: TObject; const Connection: TsgcQUICConnection;
const E: Exception);
begin
Log('QUIC error: ' + E.ClassName + ': ' + E.Message);
end;