Zum Hauptinhalt springen

11. Fehlerbehandlung

11. Fehlerbehandlung

Ein Endpunkt, der einen Fehler erkennt, SOLLTE die Existenz dieses Fehlers seinem Peer signalisieren. Sowohl Fehler auf Transportebene als auch auf Anwendungsebene können eine gesamte Verbindung beeinträchtigen; siehe Abschnitt 11.1. Nur Fehler auf Anwendungsebene können auf einen einzelnen Stream isoliert werden; siehe Abschnitt 11.2.

Der am besten geeignete Fehlercode (Abschnitt 20) SOLLTE in den Frame aufgenommen werden, der den Fehler signalisiert. Wo diese Spezifikation Fehlerbedingungen identifiziert, identifiziert sie auch den verwendeten Fehlercode.

Ein zustandsloser Reset (Abschnitt 10.3) ist für keinen Fehler geeignet, der mit einem CONNECTION_CLOSE- oder RESET_STREAM-Frame signalisiert werden kann. Ein zustandsloser Reset DARF NICHT von einem Endpunkt verwendet werden, der den notwendigen Zustand hat, um einen Frame auf der Verbindung zu senden.

11.1 Verbindungsfehler

Fehler, die dazu führen, dass die Verbindung unbrauchbar wird, wie eine offensichtliche Verletzung der Protokollsemantik oder eine Beschädigung des Zustands, der eine gesamte Verbindung betrifft, MÜSSEN mit einem CONNECTION_CLOSE-Frame (Abschnitt 19.19) signalisiert werden.

Ein Endpunkt KANN die Verbindung auf diese Weise schließen, selbst wenn der Fehler nur einen einzelnen Stream betrifft.

Ein Endpunkt MUSS die Anzahl der von ihm gesendeten Fehler-Frames begrenzen. Ein Endpunkt KANN einen CONNECTION_CLOSE-Frame in einem Paket senden, das nur diesen Frame enthält, und es SOLLTE dies als Antwort auf den Empfang eines CONNECTION_CLOSE-Frames senden.

11.2 Stream-Fehler

Wenn ein Fehler auf Anwendungsebene einen einzelnen Stream betrifft, die Verbindung aber ansonsten in einem wiederherstellbaren Zustand belässt, kann der Endpunkt einen RESET_STREAM-Frame (Abschnitt 19.4) mit einem geeigneten Fehlercode senden, um nur den betroffenen Stream zu beenden.

RESET_STREAM MUSS von der Anwendung veranlasst werden, obwohl die Gründe für das Senden von RESET_STREAM die Erkennung eines Fehlers im Stream durch den Transport umfassen könnten.

Abgesehen von RESET_STREAM DARF ein Endpunkt KEINEN Frame auf einem Stream im Zustand "Reset Sent" oder einem beliebigen terminalen Zustand senden -- das heißt, nach dem Senden eines RESET_STREAM-Frames.