TsgcQUICServer › Ereignisse › OnQUICException

OnQUICException Ereignis

Wird ausgelöst, wenn beim Bedienen einer QUIC-Verbindung oder des Listeners eine unbehandelte Ausnahme auftritt.

Syntax

property OnQUICException: TsgcQUICServerExceptionEvent;
// TsgcQUICServerExceptionEvent = procedure(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception) of object

Standardwert

—

Parameter

NameTypBeschreibung
SenderTObjectDie TsgcQUICServer-Instanz.
aConnectionconst TsgcQUICServerConnectionDie 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.
aExceptionExceptionDie abgefangene Ausnahme. Sie wird freigegeben, sobald der Handler zurückkehrt, kopieren Sie also alles, was Sie behalten möchten.

Hinweise

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.

Beispiel


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;

Zurück zu Ereignissen