MC_RECEIVE_IMMEDIATE

MC_RECEIVE_IMMEDIATE動詞は、パートナー トランザクション プログラム (TP) から現在使用可能なすべてのデータを受け取ります。 使用可能なデータがない場合、ローカル TP は待機しません。 会話がブロックされないようにするには、WinAsyncAPPC と組み合わせてMC_RECEIVE_AND_WAITを発行します。 次の構造体では、 MC_RECEIVE_IMMEDIATE 動詞で使用される動詞制御ブロック (VCB) について説明します。

構文

  
struct mc_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       reserv4;  
    unsigned char       rts_rcvd;  
    unsigned char       reserv5;  
    unsigned short      max_len;  
    unsigned short      dlen;  
    unsigned char FAR * dptr;  
    unsigned char       reserv6[5];  
};   

メンバー

オペコード
指定されたパラメーター。 動詞の操作コード (AP_M_RECEIVE_IMMEDIATE) を指定します。

opext
指定されたパラメーター。 動詞操作の拡張機能 (AP_MAPPED_CONVERSATION) を指定します。

Reserv2
予約済みフィールド。

primary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるプライマリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラーコードについては、「リターン コード」を参照してください。

secondary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるセカンダリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。 この動詞の有効なエラーコードについては、「リターン コード」を参照してください。

tp_id
指定されたパラメーター。 ローカル TP を識別します。 このパラメーターの値は、呼び出し元の TP の TP_STARTED または呼び出された TP の RECEIVE_ALLOCATE によって返されます。

conv_id
指定されたパラメーター。 会話識別子を提供します。 このパラメーターの値は、呼び出し元の TP の MC_ALLOCATE または呼び出された TP のRECEIVE_ALLOCATE によって返されます。

what_rcvd
返されたパラメーター。 受信データと共に受信した情報が含まれます。

  • AP_CONFIRM_DEALLOCATEは、パートナー TP がAP_SYNC_LEVELに設定された dealloc_typeMC_DEALLOCATE を発行し、 MC_ALLOCATEによって確立された会話の同期レベルがAP_CONFIRM_SYNC_LEVELされることを示します。 この値を受け取ると、ローカル TP は通常 、MC_CONFIRMEDを発行します。

  • AP_CONFIRM_SENDは、パートナー TP がAP_SYNC_LEVELに設定ptr_typeMC_PREPARE_TO_RECEIVEを発行し、MC_ALLOCATEによって確立された会話の同期レベルがAP_CONFIRM_SYNC_LEVELされることを示します。 この値を受信すると、ローカル TP は通常 、MC_CONFIRMEDを発行し、データの送信を開始します。

  • AP_CONFIRM_WHAT_RECEIVEDは、パートナー TP が MC_CONFIRMを発行したことを示します。 この値を受け取ると、ローカル TP は通常 、MC_CONFIRMEDを発行します。

  • AP_DATA_COMPLETEは、マップされた会話の MC_RECEIVE_IMMEDIATE について、ローカル TP が完全なデータ レコードまたはデータ レコードの最後の部分を受信したことを示します。 この値を受け取ると、ローカル TP は通常 、MC_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 によって発行されたMC_DEALLOCATEに応じて、会話の割り当てが解除されました。

  • AP_DATA_INCOMPLETEは、マップされた会話の MC_RECEIVE_IMMEDIATE について、ローカル TP が不完全なデータ レコードを受信したことを示します。 max_len パラメーターは、データ レコードの長さより小さい値を指定しました (レコードを読み取る最初の受信動詞でない場合は、データ レコードの残りの部分より小さい値)。 この値を受け取ると、ローカル TP は通常、レコードの次 の部分を 受け取るためにMC_RECEIVE_IMMEDIATEを再発行 (または別の受信動詞を発行) します。

  • AP_NONEは、TP がデータまたは会話状態インジケーターを受信しなかったことを示します。

  • AP_SENDは、パートナー TP に対して、会話が RECEIVE 状態になったと示します。 ローカル TP の場合、会話は SEND 状態になりました。 この値を受信すると、ローカル TP は通常、 MC_SEND_DATA を使用してデータの送信を開始します。

    rtn_status
    指定されたパラメーター。 データと会話の状態インジケーターの両方を 1 つの API 呼び出し内で返す必要があるかどうかを示します。

  • AP_NOでは、動詞の個別の呼び出しでインジケーターを個別に返す必要があることを指定します。

  • AP_YESは、両方が使用可能な場合に、インジケーターを一緒に返す必要があることを指定します。 どちらも次の場合に返されます。

    受信バッファーは、状態インジケーターの前にあるすべてのデータを保持するのに十分な大きさです。

    データは、状態インジケーターの前の最後のデータ レコードです。

    rts_rcvd
    返されたパラメーター。 送信要求インジケーターが含まれます。 次のいずれかの値になります。

  • AP_YESは、パートナー TP が MC_REQUEST_TO_SENDを発行したことを示します。これは、ローカル TP が会話を RECEIVE 状態に変更するよう要求します。

  • AP_NOは、パートナー TP が MC_REQUEST_TO_SENDを発行していないことを示します。

    max_len
    指定されたパラメーター。 ローカル TP が受信できるデータの最大バイト数を示します。 範囲は 0 から 65535 です。

    Microsoft Windows オペレーティング システムとWindowsグラフィカル環境の場合、この値は、受信したデータを格納するバッファーの長さを超えないようにする必要があります。

    OS/2 オペレーティング・システムの場合、 dptr のオフセットに max_len の値を加えたオフセットは、データ・セグメントのサイズを超えてはなりません。

    max_lenが 0 に設定されたMC_RECEIVE_IMMEDIATEを発行することで、ローカル TP は、パートナー TP に送信するデータ、確認のシーク、または会話状態の変更があるかどうかを判断できます。

    dlen
    返されたパラメーター。 受信したデータのバイト数を提供します。 データは dptr で指定されたバッファーに格納されます。 長さが 0 の場合は、データが受信されなかったことを示します。

    dptr
    指定されたパラメーター。 ローカル TP によって受信されたデータを格納するバッファーのアドレス。

    Windowsオペレーティング システムとWindowsグラフィカル環境の場合、データ バッファーは静的データ領域またはグローバルに割り当てられた領域に配置できます。 データ バッファーは、この領域内に完全に収まる必要があります。

    OS/2 オペレーティング システムの場合、データ バッファーは、フラグが 1 の DosAllocSeg 関数によって割り当てられる、名前のない共有セグメント上に存在する必要があります。 データ バッファーは、データ セグメントに完全に収まる必要があります。

リターン コード

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_UNSUCCESSFUL
主なリターン コード。パートナー TP からすぐに使用できるデータはありません。

AP_DEALLOC_NORMAL
主なリターン コード。パートナー TP が確認を要求せずに会話の割り当てを解除しました。 dealloc_typeが次のいずれかに設定されたMC_DEALLOCATE発行されたパートナー TP:

  • 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_STATE_CHECK
    プライマリ リターン コード。動詞は無効な状態で発行されたため、実行されませんでした。

    AP_RCV_IMMD_BAD_STATE

    セカンダリ リターン コード。会話が RECEIVE 状態ではなかった。

    AP_ALLOCATION_ERROR

    セカンダリ リターン コード。APPC が会話の割り当てに失敗しました。 会話の状態は RESET に設定されます。

    このコードは、 MC_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_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
    主なリターン コード。会話が SEND 状態の間にパートナー TP が MC_SEND_ERROR を発行しました。 データは切り捨てられませんでした。

    AP_PROG_ERROR_PURGING
    主なリターン コード。受信、保留中、PENDING_POST、CONFIRM、CONFIRM_SEND、またはCONFIRM_DEALLOCATE状態の場合、パートナー TP は MC_SEND_ERRORを発行しました。 送信されたがまだ受信されていないデータは消去されます。

    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
    主なリターン コード。次のいずれかの理由により、会話の割り当てが解除されました。

  • dealloc_type が AP_ABEND に設定された MC_DEALLOCATE 発行されたパートナー TP。

  • パートナー TP が異常終了を検出し、パートナー LU が MC_DEALLOCATE 要求を送信しました。

解説

ローカル TP は、次のプロセスを通じてデータを受信します。

  1. ローカル TP は、データの完全な単位の受信が完了するまで受信動詞を発行します。 受信したデータは 1 つのデータ レコードです。

    データの完全な単位を受信するには、ローカル TP が受信動詞を複数回発行する必要がある場合があります。 データの完全な単位を受信した後、ローカル TP はそれを操作できます。

    受信動詞は 、MC_RECEIVE_AND_POSTMC_RECEIVE_AND_WAITおよびMC_RECEIVE_IMMEDIATEです。

  2. ローカル 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 変更なし