8.2 非請求メッセージ・ハンドラの定義

非請求メッセージ・ハンドラ関数を定義するには、次のシグネチャを使用してtpsetunsol(3c)関数を呼び出します。

int
tpsetunsol(*myfunc)

Windowsベースのオペレーティング・システムを実行している場合、以下のような非請求メッセージ・ハンドラ関数を宣言する必要があります。

void _TMDLLENTRY CustomerUnsolFunc(char *data, long len, long flags)

Tuxedoライブラリと使用中のコードの間の適切な呼出し規約を取得するために、Windowsベースのオペレーティング・システムでは_TMDLLENTRYマクロが必要になります。

UnixシステムではNULL文字列に拡張されるため、_TMDLLENTRYマクロは必要ありません。

次の表は、tpsetunsol()関数に渡すことができる唯一の引数を示しています。

表8-2 tpsetunsol()関数の引数

引数 説明
myfunc コールバック関数のプロトタイプに準拠する関数へのポインタ。このプロトタイプに準拠するには、関数で次の3つのパラメータを使用できることが必要です。
  • data - 非請求メッセージを含む型付きバッファを指します
  • len - バッファの長さ
  • flags - 現在使用されていません

クライアントが非請求メッセージを受信すると、そのメッセージと共にコールバック関数がディスパッチされます。できるかぎりタスクが中断されないようにするには、非請求メッセージのハンドラ関数で最小限の処理しか行われないようにコーディングする必要があります。このようにすると、ハンドラ関数が待機中のプロセスにすぐに戻ることができます。