Aller au contenu principal

IX. Algorithmes de l'interpréteur des appels système

Chaque appel système est examiné, avec les changements d'état qu'il peut provoquer :

CONNECT​

S'il n'y a pas d'entrée, en créer une, émettre un RFC et entrer dans l'état RFC-SENT.

Si CS = PENDING, parcourir la file et rejeter toutes les requêtes non correspondantes. Si aucune correspondance n'est trouvée, émettre un RFC et entrer dans l'état RFC-SENT. Si une correspondance est trouvée, émettre un RFC et entrer dans l'état OPEN. La transmission peut commencer dès que l'espace tampon a été alloué.

Dans tout autre état, cette commande est illégale.

LISTEN​

Si aucune entrée n'existe, en créer une et entrer dans l'état LISTENING.

Si CS = PENDING, informer l'utilisateur et entrer dans l'état RFC-RCVD.

Dans tout autre état, cette commande est illégale.

ACCEPT​

Si CS = RFC-RCVD, alors émettre un RFC et entrer dans l'état OPEN. La transmission de données peut avoir lieu dès que l'espace tampon est alloué.

Si CS = ABORT, informer l'utilisateur de la terminaison prématurée de la connexion. Si la file des appels en attente est vide, supprimer l'entrée ; sinon, entrer dans l'état PENDING.

Cette commande ne peut être exécutée légalement dans aucun autre état.

CLOSE​

Si CS =

  • LISTENING, alors supprimer l'entrée.
  • RFC-RCVD, alors émettre un CLS et entrer dans l'état CLS-WAIT.
  • ABORT, informer l'utilisateur de la terminaison prématurée de la connexion. Si la file des appels en attente est vide, supprimer l'entrée ; sinon, entrer dans l'état PENDING.
  • RFC-SENT, alors émettre un CLS et entrer dans l'état CLS-WAIT.
  • OPEN, si nous sommes du côté émission et que la file de données n'est pas vide, ou si un Data-RFNM est encore en attente, entrer dans l'état DATA-WAIT ; sinon, émettre un CLS et entrer dans l'état CLS-WAIT.
  • CLS-WAIT, émettre un CLOSE dans cet état est une USER ERROR (erreur de l'utilisateur).
  • DATA-WAIT, émettre un CLOSE dans cet état constitue également une séquence illégale.
  • RFNM-WAIT, ignorer le CLOSE.

Un CLOSE valide ne peut pas être émis si aucune entrée n'existe, ou si un socket est dans l'état PENDING.


Note: undefined