RECEIVE_IMMEDIATE
RECEIVE_IMMEDIATE動詞は、パートナー トランザクション プログラム (TP) から現在使用可能なすべてのデータを受け取ります。 使用可能なデータがない場合、ローカル TP は待機しません。 会話のブロックを回避するために、Microsoft Windows オペレーティング システムは WinAsyncAPPC と組み合わせてRECEIVE_AND_WAITを発行できます。
次の構造体は、 RECEIVE_IMMEDIATE 動詞によって使用される動詞制御ブロックを表します。
構文
struct receive_immediate {
unsigned short opcode;
unsigned char opext;
unsigned char reserv2;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char tp_id[8];
unsigned long conv_id;
unsigned short what_rcvd;
unsigned char rtn_status;
unsigned char fill;
unsigned char rts_rcvd;
unsigned char reserv4;
unsigned short max_len;
unsigned short dlen;
unsigned char FAR * dptr;
unsigned char reserv5[5];
};
メンバー
opcode
指定されたパラメーター。 動詞操作コード (AP_B_RECEIVE_IMMEDIATE) を指定します。
opext
指定されたパラメーター。 動詞操作拡張機能AP_BASIC_CONVERSATIONを指定します。
reserv2
予約済みフィールド。
primary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるプライマリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラーコードについては、「リターン コード」を参照してください。
secondary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるセカンダリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラーコードについては、「リターン コード」を参照してください。
tp_id
指定されたパラメーター。 ローカル TP を識別します。 このパラメーターの値は、呼び出し元の TP で TP_STARTED するか、呼び出された TP のRECEIVE_ALLOCATE によって返されます。
conv_id
指定されたパラメーター。 会話識別子を提供します。 このパラメーターの値は、呼び出し元 TP の ALLOCATE または呼び出された TP のRECEIVE_ALLOCATE によって返されます。
what_rcvd
返されたパラメーター。 受信データと共に受信した情報が含まれます。 [メンバー] セクションの後に、使用可能な値が一覧表示されます。
rtn_status
指定されたパラメーター。 1 つの API 呼び出し内でデータと会話の状態インジケーターの両方を返す必要があるかどうかを示します。
AP_NOを使用して、動詞の個別の呼び出しでインジケーターを個別に返すように指定します。
両方が使用可能な場合は、AP_YESを使用してインジケーターを一緒に返すように指定します。 どちらも、次の場合に返すことができます。
受信バッファーは、状態インジケーターの前にあるすべてのデータを保持するのに十分な大きさです。
fill パラメーターは BUFFER または LL を指定し、データは状態インジケーターの前の最後の論理レコードです。
fill
指定されたパラメーター。 ローカル TP がデータを受信する方法を指定します。 RECEIVE_IMMEDIATEにのみ使用されます。AP_BUFFERを使用して、 max_lenで指定 されたバイト数に達するまで、またはデータの終わりまでローカル TP がデータを受信することを示します。 データは論理レコード形式に関係なく受信されます。
AP_LLを使用して、データが論理レコード形式で受信されることを示します。 受信するデータには、完全な論理レコード、論理レコード のmax_len バイト部分、または論理レコードの末尾を指定できます。
rts_rcvd
返されたパラメーター。 送信要求インジケーターが含まれます。 次のいずれかの値になります。AP_YESは、パートナー TP が REQUEST_TO_SENDを発行したことを示します。これにより、ローカル TP が会話を RECEIVE 状態に変更するよう要求します。
AP_NOは、パートナー TP が REQUEST_TO_SENDを発行しなかったことを示します。
max_len
指定されたパラメーター。 ローカル TP が受信できるデータの最大バイト数を示します。 範囲は 0 ~ 65535 です。Windows オペレーティング システムの場合、この値は、受信したデータを格納するバッファーの長さを超えてはなりません。
max_lenをゼロに設定してRECEIVE_IMMEDIATEを発行することで、ローカル TP は、パートナー TP が送信するデータを持っているか、確認をシークするか、会話の状態を変更したかを判断できます。
dlen
返されたパラメーター。 受信したデータのバイト数を提供します。 データは dptr で指定されたバッファーに格納されます。 長さが 0 の場合は、データが受信されなかったことを示します。dptr
指定されたパラメーター。 ローカル TP によって受信されたデータを格納するバッファーのアドレス。Windows オペレーティング システムの場合、データ バッファーは静的データ領域またはグローバルに割り当てられた領域に存在できます。 データ バッファーは、この領域内に完全に収まる必要があります。
what_rcvd パラメーターによって返される値
AP_CONFIRM_DEALLOCATEは、パートナー TP が DEALLOCATE を発行し、 dealloc_typeが AP_SYNC_LEVEL に設定され、 ALLOCATE によって確立された会話の同期レベルがAP_CONFIRM_SYNC_LEVELされることを示します。 この値を受け取ると、ローカル TP は通常 CONFIRMED を発行します。
AP_CONFIRM_SENDは、パートナー TP が AP_SYNC_LEVEL に設定されたptr_typeでPREPARE_TO_RECEIVEを発行し、ALLOCATE によって確立された会話の同期レベルがAP_CONFIRM_SYNC_LEVELされることを示します。 この値を受け取ると、ローカル TP は通常 CONFIRMED を発行し、データの送信を開始します。
AP_CONFIRM_WHAT_RECEIVEDは、パートナー TP が CONFIRM を発行したことを示します。 この値を受け取ると、ローカル TP は通常 CONFIRMED を発行します。
fill が AP_BUFFER に設定されている場合、RECEIVE_IMMEDIATEによって基本的な会話のAP_DATAが返されます。 ローカル TP は、 データのmax_len または終了に達するまでデータを受信しました。 詳細については、このトピックの最後にある「RECEIVE_IMMEDIATEデータの終わり」を参照してください。
AP_DATA_COMPLETEは、基本会話で fill がAP_LLに設定されたRECEIVE_IMMEDIATEの場合、ローカル TP が完全な論理レコードまたは論理レコードの末尾を受信したことを示します。
この値を受け取ると、ローカル TP は通常 、RECEIVE_IMMEDIATE を再発行するか、別の受信動詞を発行します。 パートナー TP がより多くのデータを送信した場合、ローカル TP は新しいデータユニットの受信を開始します。
それ以外の場合、ローカル TP は、 primary_rcに AP_OKが含まれており、 what_rcvd に次のいずれかの値が含まれている場合、状態情報を調べます。
AP_SEND
AP_CONFIRM_SEND
AP_CONFIRM_DEALLOCATE
AP_CONFIRM_WHAT_RECEIVED
ローカル TP が通常実行する次のアクションについては、このトピックのリターン コードの値の説明を参照してください。
primary_rcにAP_DEALLOC_NORMALが含まれている場合、パートナー TP によって発行された DEALLOCATE に応答して、会話の割り当てが解除されました。
AP_DATA_INCOMPLETEは、マップされた会話内の RECEIVE_IMMEDIATE について、ローカル TP が不完全なデータ レコードを受信したことを示します。 max_len パラメーターは、データ レコードの長さより小さい値を指定しました (レコードを読み取る最初の受信動詞でない場合は、データ レコードの残りの部分より小さい)。
基本 会話でfill が AP_LL に設定されたRECEIVE_IMMEDIATEの場合、この値は、ローカル TP が不完全な論理レコードを受信したことを示します。
この値を受け取ると、ローカル TP は通常、レコードの次の部分を受信するためにRECEIVE_IMMEDIATEを再発行 (または別の受信動詞を発行) します。
AP_NONEは、TP がデータまたは会話の状態インジケーターを受信しなかったことを示します。
AP_SENDは、パートナー TP に対して、会話が RECEIVE 状態に入ったと示します。 ローカル TP の場合、会話は SEND 状態になりました。 この値を受け取ると、ローカル TP は通常 、SEND_DATAを使用してデータの送信を開始します。
リターン コード
AP_OK
プライマリ リターン コード。動詞は正常に実行されました。
rtn_statusがAP_YESされると、上記のリターン コードまたは次のいずれかのリターン コードを返すことができます。
AP_DATA_COMPLETE_SEND
主なリターン コード。これは、AP_DATA_COMPLETEとAP_SENDの組み合わせです。
AP_DATA_COMPLETE_CONFIRM_SEND
主なリターン コード。これは、AP_DATA_COMPLETEとAP_CONFIRM_SENDの組み合わせです。
AP_DATA_COMPLETE_CONFIRM
主なリターン コード。これは、AP_DATA_COMPLETEとAP_CONFIRM_WHAT_RECEIVEDの組み合わせです。
AP_DATA_COMPLETE_CONFIRM_DEALL
主なリターン コード。これは、AP_DATA_COMPLETEとAP_CONFIRM_DEALLOCATEの組み合わせです。
AP_DATA_SEND
主なリターン コード。これは、AP_DATAとAP_SENDの組み合わせです。
AP_DATA_CONFIRM_SEND
主なリターン コード。これは、AP_DATAとAP_CONFIRM_SENDの組み合わせです。
AP_DATA_CONFIRM
主なリターン コード。これは、AP_DATAとAP_CONFIRM_WHAT_RECEIVEDの組み合わせです。
AP_DATA_CONFIRM_DEALLOCATE
主なリターン コード。これは、AP_DATAとAP_CONFIRM_DEALLOCATEの組み合わせです。
AP_UNSUCCESSFUL
主なリターン コード。パートナー TP からすぐに使用できるデータはありません。
AP_DEALLOC_NORMAL
主なリターン コード。パートナー TP は、確認を要求せずに会話の割り当てを解除しました。 パートナー TP が DEALLOCATE を発行し 、dealloc_type 次のいずれかに設定します。
AP_FLUSH
メッセージ交換の同期レベルが AP_NONE として指定されたAP_SYNC_LEVEL
rtn_statusがAP_YES場合は、what_rcvdも確認します。
AP_PARAMETER_CHECK
プライマリ リターン コード。パラメーター エラーのため、動詞は実行されませんでした。AP_BAD_CONV_ID
セカンダリ リターン コード。 conv_id の値が、APPC によって割り当てられた会話識別子と一致しませんでした。
AP_BAD_TP_ID
セカンダリ リターン コード。 tp_id の値が、APPC によって割り当てられた TP 識別子と一致しませんでした。
AP_BAD_RETURN_STATUS_WITH_DATA
セカンダリ リターン コード。指定した rtn_status 値が APPC によって認識されませんでした。
AP_INVALID_DATA_SEGMENT
セカンダリ リターン コード。データ バッファーに指定された長さが、バッファーを格納するために割り当てられたセグメントより長かった。
AP_RCV_IMMD_BAD_FILL
基本的な会話のセカンダリ リターン コード。 fill パラメーターが無効な値に設定されました。
AP_STATE_CHECK
プライマリ リターン コード。動詞は無効な状態で発行されたため、実行されませんでした。AP_RCV_IMMD_BAD_STATE
セカンダリ リターン コード。会話が RECEIVE 状態ではなかった。
AP_ALLOCATION_ERROR
セカンダリ リターン コード。APPC が会話を割り当てませんでした。 会話の状態は RESET に設定されます。
このコードは、 ALLOCATE の後に発行された動詞を介して返される場合があります。
AP_ALLOCATION_FAILURE_NO_RETRY
セカンダリ リターン コード。構成エラーやセッション プロトコル エラーなどの永続的な条件のため、会話を割り当てることができません。 エラーを特定するには、システム管理者がエラー ログ ファイルを調べる必要があります。 エラーが修正されるまで、割り当てを再試行しないでください。
AP_ALLOCATION_FAILURE_RETRY
セカンダリ リターン コード。リンクエラーなどの一時的な状態のため、会話を割り当てませんでした。 エラーの理由は、システム エラー ログに記録されます。 割り当てを再試行してください。
AP_CONVERSATION_TYPE_MISMATCH
セカンダリ リターン コード。パートナー論理ユニット (LU) または TP は、割り当て要求で指定された会話の種類 (基本またはマップ済み) をサポートしていません。
AP_PIP_NOT_ALLOWED
セカンダリ リターン コード。割り当て要求で PIP データが指定されましたが、パートナー TP がこのデータを必要としないか、パートナー LU でサポートされていません。
AP_PIP_NOT_SPECIFIED_CORRECTLY
セカンダリ リターン コード。パートナー TP には PIP データが必要ですが、割り当て要求で PIP データが指定されていないか、パラメーターの数が正しくありません。
AP_SECURITY_NOT_VALID
セカンダリ リターン コード。割り当て要求で指定されたユーザー識別子またはパスワードが、パートナー LU によって受け入れられなかった。
AP_SYNC_LEVEL_NOT_SUPPORTED
セカンダリ リターン コード。パートナー TP は、割り当て要求で指定された sync_level (AP_NONEまたはAP_CONFIRM_SYNC_LEVEL) をサポートしていないか、 sync_level が認識されませんでした。
AP_TP_NAME_NOT_RECOGNIZED
セカンダリ リターン コード。パートナー LU は、割り当て要求で指定された TP 名を認識しません。
AP_TRANS_PGM_NOT_AVAIL_NO_RETRY
セカンダリ リターン コード。リモート LU は、要求されたパートナー TP を開始できなかったため、割り当て要求を拒否しました。 条件は永続的です。 エラーの理由が、リモート ノードでログに記録されている可能性があります。 エラーが修正されるまで、割り当てを再試行しないでください。
AP_TRANS_PGM_NOT_AVAIL_RETRY
セカンダリ リターン コード。リモート LU は、要求されたパートナー TP を開始できなかったため、割り当て要求を拒否しました。 状態は一時的 (タイム アウトなど) である可能性があります。エラーの理由が、リモート ノードでログに記録されている可能性があります。 割り当てを再試行してください。
AP_COMM_SUBSYSTEM_ABENDED
プライマリ リターン コード。次のいずれかの条件を示します。このメッセージ交換で使用されているノードで、ABEND が発生しました。
TP と PU 2.1 ノードの間の接続が切断されました (LAN エラー)。
TP のコンピューターの SnaBase で ABEND が発生しました。
ABEND の理由を特定するには、システム管理者がエラー ログを調べる必要があります。
AP_COMM_SUBSYSTEM_NOT_LOADED
主なリターン コード。必要なコンポーネントを読み込めなかったか、動詞の処理中に終了しました。 そのため、通信を行うことができませんでした。 是正措置については、システム管理者に問い合わせてください。この戻りコードを ALLOCATE と共に使用すると、ローカル LU をサポートする通信システムが見つからなかったことを示すことができます。 (たとえば、 TP_STARTED で指定されたローカル LU エイリアスが正しくないか、構成されていません)。 lu_alias または mode_name が 8 文字未満の場合は、これらのフィールドに右側のスペースが入力されていることを確認する必要があることに注意してください。 ALLOCATE 要求を満たすノードがないため、これらのパラメーターにスペースが入っていない場合、このエラーが返されます。
ALLOCATE が複数のノードで構成された Host Integration Server クライアント システムに対してこのリターン コードを生成する場合、次の 2 つのセカンダリ リターン コードがあります。
0xF0000001
セカンダリ リターン コード。ノードが開始されていません。
0xF0000002
セカンダリ リターン コード。少なくとも 1 つのノードが開始されましたが、ローカル LU ( TP_STARTED が発行された場合) は、どのアクティブ ノードでも構成されていません。 この問題は、次のいずれかである可能性があります。
ローカル LU を持つノードが開始されていません。
ローカル LU が構成されていません。
AP_CONV_FAILURE_NO_RETRY
プライマリ リターン コード。セッション プロトコル エラーなどの永続的な条件が原因で、会話が終了しました。 システム管理者は、システム エラー ログを調べて、エラーの原因を特定する必要があります。 エラーが修正されるまで、会話を再試行しないでください。AP_CONV_FAILURE_RETRY
プライマリ リターン コード。一時的なエラーが発生したため、会話が終了しました。 TP を再起動して、問題が再度発生するかどうかを確認します。 その場合、システム管理者はエラー ログを調べて、エラーの原因を特定する必要があります。AP_CONVERSATION_TYPE_MIXED
プライマリ リターン コード。TP は、基本的な会話動詞とマップされた会話動詞の両方を発行しました。 1 つの会話で発行できる型は 1 つだけです。AP_INVALID_VERB_SEGMENT
プライマリ リターン コード。VCB がデータ セグメントの終わりを越えています。AP_PROG_ERROR_NO_TRUNC
プライマリ リターン コード。パートナー TP は、会話が SEND 状態の間にAP_PROGに設定err_typeでSEND_ERRORを発行しました。 データは切り捨てられませんでした。AP_PROG_ERROR_PURGING
プライマリ リターン コード。RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND、またはCONFIRM_DEALLOCATEの状態では、パートナー TP は err_type が AP_PROG に設定された SEND_ERROR を発行します。 送信されたデータがまだ受信されていないデータは消去されます。AP_PROG_ERROR_TRUNC
プライマリ リターン コード。SEND 状態では、不完全な論理レコードを送信した後、パートナー TP は err_type を AP_PROG に設定 して SEND_ERROR発行します。 ローカル TP は、受信動詞を介して論理レコードの最初の部分を受け取った可能性があります。AP_STACK_TOO_SMALL
プライマリ リターン コード。アプリケーションのスタック サイズが小さすぎて動詞を実行できません。 アプリケーションのスタック サイズを増やしてください。AP_CONV_BUSY
プライマリ リターン コード。どの会話にも、一度に 1 つの未処理の会話動詞しか存在できません。 これは、ローカル TP に複数のスレッドがあり、複数のスレッドが同じ conv_idを使用して APPC 呼び出しを発行している場合に発生する可能性があります。AP_UNEXPECTED_DOS_ERROR
プライマリ リターン コード。ローカル TP からの APPC 呼び出しの処理中に、オペレーティング システムから APPC にエラーが返されました。 オペレーティング システムのリターン コードは、secondary_rc 経由で返されます。 これは、Intel バイトスワップ順で表示されます。 問題が解決しない場合は、システム管理者に問い合わせてください。AP_DEALLOC_ABEND_PROG
プライマリ リターン コード。次のいずれかの理由で、会話の割り当てが解除されました。パートナー TP は、dealloc_typeが AP_ABEND_PROG に設定された DEALLOCATE を発行しました。
パートナー TP で異常終了が発生し、パートナー LU から DEALLOCATE 要求が送信されました。
AP_DEALLOC_ABEND_SVC
プライマリ リターン コード。パートナー TP が DEALLOCATE を発行し、 dealloc_typeが AP_ABEND_SVC に設定されているため、会話の割り当てが解除されました。AP_DEALLOC_ABEND_TIMER
プライマリ リターン コード。パートナー TP が DEALLOCATE を発行し、 dealloc_typeが AP_ABEND_TIMER に設定されているため、会話の割り当てが解除されました。AP_SVC_ERROR_NO_TRUNC
プライマリ リターン コード。SEND 状態の場合、パートナー TP (またはパートナー LU) は 、err_typeを AP_SVC に設定して SEND_ERROR 発行します。 データは切り捨てられませんでした。AP_SVC_ERROR_PURGING
プライマリ リターン コード。RECEIVE、PENDING_POST、CONFIRM、 CONFIRM_SEND 、またはCONFIRM_DEALLOCATE状態の間に AP_SVC に設定されたerr_typeでSEND_ERROR発行されたパートナー TP (またはパートナー LU)。 パートナー TP に送信されたデータが削除された可能性があります。AP_SVC_ERROR_TRUNC
プライマリ リターン コード。SEND 状態では、不完全な論理レコードを送信した後、パートナー TP (またはパートナー LU) がSEND_ERROR発行します。 ローカル TP が論理レコードの最初の部分を受け取った可能性があります。
注釈
ローカル TP は、次のプロセスを通じてデータを受信します。
ローカル TP は、データの完全な単位の受信が完了するまで、受信動詞を発行します。 受信するデータは次のとおりです。
1 つの論理レコード。
論理レコード形式とは無関係に受信されたデータのバッファー。
ローカル TP は、データの完全な単位を受信するために、受信動詞を複数回発行する必要がある場合があります。 データの完全な単位を受信した後、ローカル TP はそれを操作できます。
受信動詞は 、RECEIVE_AND_POST、 RECEIVE_AND_WAIT、 およびRECEIVE_IMMEDIATEです。
ローカル TP は、受信動詞を再度発行します。 これには、次のいずれかの効果があります。
パートナー TP がより多くのデータを送信した場合、ローカル TP は新しいデータユニットの受信を開始します。
パートナー TP がデータの送信を完了した場合、または確認を待機している場合は、状態情報 ( what_rcvdを通じて使用可能) は、ローカル TP が通常実行する次のアクションを示します。
TP がこの動詞を発行する場合、会話は RECEIVE 状態である必要があります。
新しい状態は 、primary_rcによって決定されます。 primary_rcがAP_OK場合、新しい状態はwhat_rcvdによって決定されます。
次の表では、 primary_rcがAP_OK されたときの状態の変化について詳しく説明します。
what_rcvd | 新しい状態 |
---|---|
AP_CONFIRM_DEALLOCATE | CONFIRM_DEALLOCATE |
AP_DATA_COMPLETE_CONFIRM_DEALL | CONFIRM_DEALLOCATE |
AP_DATA_CONFIRM_DEALLOCATE | CONFIRM_DEALLOCATE |
AP_CONFIRM_SEND | CONFIRM_SEND |
AP_DATA_COMPLETE_CONFIRM_SEND | CONFIRM_SEND |
AP_DATA_CONFIRM_SEND | CONFIRM_SEND |
AP_CONFIRM_WHAT_RECEIVED | CONFIRM |
AP_DATA_COMPLETE_CONFIRM | CONFIRM |
AP_DATA_CONFIRM | CONFIRM |
AP_DATA | 変更なし |
AP_DATA_COMPLETE | 変更なし |
AP_DATA_INCOMPLETE | 変更なし |
AP_SEND | SEND |
AP_DATA_COMPLETE_SEND | SEND_PENDING |
次の表では、 primary_rcがAP_OK されていない場合の状態の変化について詳しく説明します。
primary_rc | 新しい状態 |
---|---|
AP_ALLOCATION_ERROR | RESET |
AP_CONV_FAILURE_RETRY | RESET |
AP_CONV_FAILURE_NO_RETRY | RESET |
AP_DEALLOC_ABEND | RESET |
AP_DEALLOC_ABEND_PROG | RESET |
AP_DEALLOC_ABEND_SVC | RESET |
AP_DEALLOC_ABEND_TIMER | RESET |
AP_DEALLOC_NORMAL | RESET |
AP_PROG_ERROR_PURGING | 変更なし |
AP_PROG_ERROR_NO_TRUNC | 変更なし |
AP_SVC_ERROR_PURGING | 変更なし |
AP_SVC_ERROR_NO_TRUNC | 変更なし |
AP_PROG_ERROR_TRUNC | 変更なし |
AP_SVC_ERROR_TRUNC | 変更なし |
AP_UNSUCCESSFUL | 変更なし |
データの即時終了を受信する
基本的な会話では、ローカル TP が RECEIVE_IMMEDIATE を発行し、 fill を AP_BUFFER に設定すると、データの 受信は、max_len またはデータの末尾に達したときに終了します。 データの末尾は、次のいずれかによって示されます。
AP_OK以外の値を持つprimary_rc パラメーター (たとえば、AP_DEALLOC_NORMAL)。
次のいずれかの値を持つ what_rcvd パラメーター。
AP_SEND
AP_CONFIRM_SEND
AP_CONFIRM_DEALLOCATE
AP_CONFIRM_WHAT_RECEIVED
AP_DATA_CONFIRM_SEND
AP_DATA_CONFIRM_DEALLOCATE
AP_DATA_CONFIRM
データの末尾に達したかどうかを判断するために、ローカル TP は RECEIVE_IMMEDIATE再発行します。 新しい primary_rc パラメーターにAP_OKが含まれており、 what_rcvd にAP_DATAが含まれている場合、データの末尾に到達していません。 ただし、データの末尾に達した場合、 primary_rc または what_rcvd はデータの終了の原因を示します。