Aller au contenu principal

11. Gestion des erreurs

11. Gestion des erreurs

Un point de terminaison qui détecte une erreur DEVRAIT signaler l'existence de cette erreur à son pair. Les erreurs au niveau du transport et au niveau de l'application peuvent affecter une connexion entière; voir Section 11.1. Seules les erreurs au niveau de l'application peuvent être isolées à un seul flux; voir Section 11.2.

Le code d'erreur le plus approprié (Section 20) DEVRAIT être inclus dans la trame qui signale l'erreur. Lorsque cette spécification identifie des conditions d'erreur, elle identifie également le code d'erreur utilisé.

Une réinitialisation sans état (Section 10.3) n'est pas appropriée pour toute erreur qui peut être signalée avec une trame CONNECTION_CLOSE ou RESET_STREAM. Une réinitialisation sans état NE DOIT PAS être utilisée par un point de terminaison qui dispose de l'état nécessaire pour envoyer une trame sur la connexion.

11.1 Erreurs de connexion

Les erreurs qui rendent la connexion inutilisable, telles qu'une violation évidente de la sémantique du protocole ou une corruption d'état qui affecte une connexion entière, DOIVENT être signalées à l'aide d'une trame CONNECTION_CLOSE (Section 19.19).

Un point de terminaison PEUT fermer la connexion de cette manière, même si l'erreur n'affecte qu'un seul flux.

Un point de terminaison DOIT limiter le nombre de trames d'erreur qu'il envoie. Un point de terminaison PEUT envoyer une trame CONNECTION_CLOSE dans un paquet qui ne contient que cette trame, et il DEVRAIT l'envoyer en réponse à la réception d'une trame CONNECTION_CLOSE.

11.2 Erreurs de flux

Si une erreur au niveau de l'application affecte un seul flux, mais laisse par ailleurs la connexion dans un état récupérable, le point de terminaison peut envoyer une trame RESET_STREAM (Section 19.4) avec un code d'erreur approprié pour terminer uniquement le flux affecté.

RESET_STREAM DOIT être initié par l'application, bien que les raisons d'envoi de RESET_STREAM puissent inclure la détection d'une erreur dans le flux par le transport.

À part RESET_STREAM, un point de terminaison NE DOIT PAS envoyer une trame sur un flux dans l'état "Reset Sent" ou tout état terminal -- c'est-à-dire, après l'envoi d'une trame RESET_STREAM.