5.5.2 記述子の無効化

tpgetrply()を呼び出したサービス(「クライアントおよびサーバーへのリクエスト/レスポンスのコーディング」を参照)がTPETIMEで失敗してリクエストを取り消す場合、tpcancel(3c)を呼び出して記述子を無効にできます。以降、応答が届いても自動的に破棄されます。

tpcancel()関数の呼出しには、次のシグネチャを使用します。

void
tpcancel(int cd)

cd (呼出し記述子)引数には、取り消すプロセスを指定します。

tpcancel()はトランザクション応答、つまりTPNOTRANフラグが設定されていない状態で呼び出されたリクエストへの応答には使用できません。トランザクション内では、tpabort(3c)がトランザクションの呼出し記述子を無効にします。

次のサンプル・コードは、タイムアウト後の応答を無効にする方法を示しています。

タイムアウト後の応答の無効化のリスト

int cd1;
  .
  .
  .

        if ((cd1=tpacall(sname, (char *)audv, sizeof(struct aud),
           TPNOTRAN)) == -1) {
         .
         .
         .
         }
         if (tpgetrply(cd1, (char **)&audv,&audrl, 0) == -1)
         {
         if (tperrno == TPETIME) {
            tpcancel(cd1);
         .
         .
         .
         }
      }
      tpreturn(TPSUCCESS, 0,NULL, 0L, 0);