メインコンテンツまでスキップ

IX. システムコールインタプリタのアルゴリズム

各システムコールについて、それが引き起こしうる状態変化とともに論じる。

CONNECT​

エントリが存在しなければ、エントリを作成し、RFC を発行して、RFC-SENT 状態に入る。

CS = PENDING であれば、キューを検索し、一致しない要求をすべて拒否する。一致するものが見つからなければ、RFC を発行して RFC-SENT 状態に入る。一致するものが見つかれば、RFC を発行して OPEN 状態に入る。バッファ領域が割り当てられ次第、送信を開始できる。

それ以外の状態では、このコマンドは不正である。

LISTEN​

エントリが存在しなければ、エントリを作成し、LISTENING 状態に入る。

CS = PENDING であれば、ユーザに通知し、RFC-RCVD 状態に入る。

それ以外の状態では、このコマンドは不正である。

ACCEPT​

CS = RFC-RCVD であれば、RFC を発行して OPEN 状態に入る。バッファ領域が割り当てられ次第、データ送信を行うことができる。

CS = ABORT であれば、接続が途中で終了したことをユーザに通知する。保留中の呼び出しキューが空であればエントリを削除し、そうでなければ PENDING 状態に入る。

それ以外の状態では、このコマンドを正当に実行することはできない。

CLOSE​

CS が次の値である場合:

  • LISTENING の場合、エントリを削除する。
  • RFC-RCVD の場合、CLS を発行し、CLS-WAIT 状態に入る。
  • ABORT の場合、接続が途中で終了したことをユーザに通知する。保留中の呼び出しキューが空であればエントリを削除し、そうでなければ PENDING 状態に入る。
  • RFC-SENT の場合、CLS を発行し、CLS-WAIT 状態に入る。
  • OPEN の場合、我々が送信側にあってデータキューが空でないか、または Data-RFNM がまだ未着であれば、DATA-WAIT 状態に入る。そうでなければ、CLS を発行して CLS-WAIT 状態に入る。
  • CLS-WAIT の場合、この状態で CLOSE を発行することは USER ERROR である。
  • DATA-WAIT の場合、この状態で CLOSE を発行することも不正な順序である。
  • RFNM-WAIT の場合、CLOSE を無視する。

エントリが存在しない場合、またはソケットが PENDING 状態にある場合、正当な CLOSE を発行することはできない。


注: undefined