次の方法で共有


受信、メッセージ

次の図は、動的アクセス モジュール (DMOD) からメッセージを受信する方法を示しています。

ルーティング手順を使用してメッセージを受信する方法を示す画像。
ルーティング手順を使用したメッセージの受信

DMOD の初期化後、3270 エミュレーターは sepdrout を呼び出してルーティング プロシージャを登録します。 DMOD はメッセージを受信すると、3270 エミュレーター・ルーティング・プロシージャーを呼び出し、その後メッセージを処理できます。

この方法では、DMOD スレッドと 3270 エミュレーター スレッドの間にコンテキスト切り替えはありません。 ただし、ルーティング手順では、制御をすばやく DMOD に戻す必要があります。 たとえば、キーボード入力の待機を中断することはできません。

アプリケーションは、受信したメッセージがこのアプリケーション用か別のアプリケーション用かを判別する必要があります。 メッセージがこのアプリケーション用でない場合は、メッセージが処理されなかったことを示すルーティング手順が戻る必要があります。 アプリケーションがメッセージを処理する場合は、処理が完了したときにバッファーを解放する必要があります。

場合によっては、ルーティング手順でメッセージを処理して完了する場合があります。 別の方法として、ルーティング手順でメッセージをアプリケーション キューに配置し、アプリケーション セマフォをクリアすることもできます。 その後、アプリケーションはメッセージを処理できます。

メッセージの処理が完了するまで待機するのではなく、メッセージの受信時にルーティング プロシージャから Status-Resource メッセージ (ローカル ノードにクレジットを返し、さらにデータを送信できるようにする) を送信することで、パフォーマンスをさらに向上させることができます。 この使用法は、 サンプル コード: 初期化とルーティングの手順に示されています。 クレジットとフロー制御の詳細については、「ペーシングとチャンク」を参照してください。

アプリケーションがメッセージを受信した後、アプリケーションはメッセージを受信したバッファーを担当します。 アプリケーションは、バッファーを再利用してメッセージを送信するか ( sbpusend を使用)、または ( sepdburl を使用して) 解放する必要があります。 再利用するバッファーに送信するメッセージの正しい数の要素が含まれていない場合、アプリケーションは追加の要素 ( sbpibergt を使用) を取得するか、既存の要素を解放できます ( sbpiberl を使用)。 この場合、アプリケーションでは、バッファー ヘッダーの numelts フィールドが正しい要素数を示していることも確認する必要があります。