TsgcQUICServer › Ereignisse › OnQUICException
Wird ausgelöst, wenn beim Bedienen einer QUIC-Verbindung oder des Listeners eine unbehandelte Ausnahme auftritt.
property OnQUICException: TsgcQUICServerExceptionEvent;
// TsgcQUICServerExceptionEvent = procedure(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception) of object
—
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcQUICServer-Instanz. |
aConnection | const TsgcQUICServerConnection | Die Verbindung, die bedient wurde, als der Fehler auftrat, oder nil bei einem Fehler auf Listener-Ebene. Prüfen Sie sie vor der Verwendung, siehe die Hinweise. |
aException | Exception | Die abgefangene Ausnahme. Sie wird freigegeben, sobald der Handler zurückkehrt, kopieren Sie also alles, was Sie behalten möchten. |
OnQUICException wird ausgelöst, wenn der Hintergrund-Listener-Thread des Servers bei einem Durchlauf der QUIC-Ereignisschleife eine Ausnahme abfängt, also beim Pumpen von Ereignissen, beim Annehmen von Verbindungen, beim Fortführen von Handshakes, beim Lesen von Streams oder innerhalb eines Ihrer eigenen Ereignishandler (ein Handler, der eine Ausnahme auslöst, wird hier abgefangen und nicht weitergereicht). Der Server verschluckt die Ausnahme und läuft weiter, daher ist die Behandlung dieses Ereignisses die einzige Möglichkeit, einen solchen Fehler zu bemerken.
Prüfen Sie aConnection auf nil, anstatt einen der beiden Fälle anzunehmen. Ein Fehler, der beim Lesen einer bestimmten Verbindung ausgelöst wird, führt diese Verbindung mit, sodass Sie die zugehörige Sitzung protokollieren oder verwerfen können. Ein vom Listener selbst ausgelöster Fehler (die Pump- und Accept-Absicherung) hat keinen Verbindungskontext und meldet nil. Die .NET-Implementierung nimmt dieselbe Aufteilung vor, füllt den Parameter aus, wenn der Fehler einer Verbindung zuzuordnen ist, und übergibt null bei Fehlern der Accept-Schleife.
Ausnahmen, die von Start selbst ausgelöst werden, kommen hier nicht an. Start läuft im Thread des Aufrufers und löst direkt aus, umschließen Sie den Aufruf daher mit try..except, um Konfigurationsfehler wie ein fehlendes Zertifikat oder ein zu altes OpenSSL abzufangen.
Dieses Ereignis läuft im Hintergrund-Listener-Thread des Servers, marshallen Sie daher zum Haupt-Thread, bevor Sie die UI ansprechen.
procedure OnQUICExceptionEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception);
begin
// nil means the listener failed, not one session
if Assigned(aConnection) then
Log(Format('QUIC error on connection created at %s: %s',
[DateTimeToStr(aConnection.CreatedAt), aException.Message]))
else
Log('QUIC listener error: ' + aException.Message);
end;