MC_RECEIVE_AND_POST

この MC_RECEIVE_AND_POST は、アプリケーション データと状態情報を非同期的に受信します。 これにより、ローカル トランザクション プログラム (TP) は、データがローカル論理ユニット (LU) に到着している間、処理を続行できます。

非同期のメッセージ MC_RECEIVE_AND_POST は未処理ですが、同じ会話で次の動詞を発行できます。

  • GET_TYPE

  • MC_GET_ATTRIBUTES

  • MC_REQUEST_TO_SEND

  • MC_SEND_ERROR

  • MC_TEST_RTS

  • TP_ENDED

    これにより、アプリケーションは非同期データ を使用して MC_RECEIVE_AND_POST を受信できます。 このMC_RECEIVE_AND_POSTは未処理ですが、引き続き MC_SEND_ERROR と REQUEST_TO_SEND 完全な非同期サポートには、この機能を使用してください。 TP がデータを受信する方法と、この動詞の使い方については、このトピックの「解説」を参照してください。

    次の構造体は、動詞によって使用される動詞制御ブロック (VCB) MC_RECEIVE_AND_POST します。

構文

  
struct mc_receive_and_post {  
    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 FAR * sema;  
    unsigned char       reserv6;  
};   

メンバー

opcode
指定されたパラメーター。 動詞の操作コードを指定AP_M_RECEIVE_AND_POST。

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 が発行したMC_DEALLOCATEが dealloc_typeに設定AP_SYNC_LEVEL。 会話の同期レベルは、 MC_ALLOCATEによって確立AP_CONFIRM_SYNC_LEVEL。 この値を受け取った場合、ローカル TP は通常、この値を MC_CONFIRMED

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

  • AP_CONFIRM_WHAT_RECEIVEDは、パートナー TP がパートナーから発行MC_CONFIRM。 この値を受け取った場合、ローカル TP は通常、この値を MC_CONFIRMED

  • AP_DATA_COMPLETE、ローカル TP がMC_RECEIVE_AND_POSTレコードまたはデータ レコードの最後の部分を受信したかどうかを示します。 この値を受け取った場合、ローカル TP は通常、別の受信 MC_RECEIVE_AND_POST を再発行するか、別の受信動詞を発行します。 パートナー 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、ローカル TP が不完全 MC_RECEIVE_AND_POSTレコードを受信したかどうかを示します。 max_lenパラメーターは、データ レコードの長さより小さい値 (レコードを読み取る最初の受信動詞ではない場合はデータ レコードの残りの部分より小さい) を指定しました。 この値を受け取った場合、ローカル TP は通常、MC_RECEIVE_AND_POST を再 発行し ( または別の受信動詞を発行)、レコードの次の部分を受け取ります。

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

  • AP_SEND TP について、メッセージ交換が RECEIVE 状態に入ったかどうかを示します。 ローカル TP の場合、会話は SEND 状態になります。 この値を受け取った場合、ローカル TP は通常、 MC_SEND_DATAを使用 してデータの送信を開始します。

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

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

  • AP_YESを使用できる場合は、インジケーターを一緒に返す必要があります。 どちらも、次の場合に返されます。

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

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

    rts_rcvd
    返されたパラメーター。 パートナー TP が発行したかどうかを示MC_REQUEST_TO_SEND。

  • AP_YES、パートナー TP がメッセージ交換を発行MC_REQUEST_TO_SEND、ローカル TP がメッセージ交換を RECEIVE 状態に変更する必要があります。

  • AP_NO、パートナー TP が発行されていない状態 を示MC_REQUEST_TO_SEND

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

    値は、受信したデータを格納するバッファーの長さを超えないようにする必要があります。 dptr のオフセットにデータ セグメントのmax_lenの値を加えた値を超えないようにする必要があります。

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

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

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

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

    sema
    指定されたパラメーター。 非同期の受信操作が終了したときに、APPC がクリアするセマフォのアドレスを提供します。 Semaパラメーターは、 CreateEventまたはopenevent Win32 関数のいずれかを呼び出すことによって取得されるイベントハンドルです。

リターン コード

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_DEALLOC_NORMAL
プライマリリターンコード。パートナー TP が MC_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 によって割り当てられたメッセージ交換 id と一致しませんでした。

AP_BAD_TP_ID

セカンダリリターンコード。 tp_id の値が、APPC によって割り当てられた tp id と一致しませんでした。

AP_BAD_RETURN_STATUS_WITH_DATA

セカンダリリターンコード。指定された rtn_status 値は、APPC で認識されませんでした。

AP_INVALID_DATA_SEGMENT

セカンダリリターンコード。データバッファーに対して指定された長さが、バッファーを格納するために割り当てられたセグメントより長くなっています。

AP_INVALID_SEMAPHORE_HANDLE

セカンダリリターンコード。RAM セマフォハンドルまたはシステムセマフォハンドルのアドレスが無効です。

Note

APPC は、無効なセマフォハンドルをすべてトラップすることはできません。 TP によって無効な RAM セマフォ ハンドルが渡された場合、保護違反の結果が発生します。

AP_STATE_CHECK
プライマリ リターン コード。動詞は無効な状態で発行されたため、実行されませんでした。

AP_RCV_AND_POST_BAD_STATE

セカンダリリターンコード。TP がこの動詞を発行したときに、メッセージ交換が受信または送信状態ではありませんでした。

AP_RCV_AND_POST_NOT_LL_BDY

セカンダリリターンコード。メッセージ交換は SEND 状態でした。TP が開始されましたが、論理レコードの送信は完了しませんでした。

AP_CANCELED
プライマリリターンコード。ローカル TP は、 MC_RECEIVE_AND_POSTをキャンセルした次のいずれかの動詞を発行しました。

Dealloc_typeがに設定されるMC_DEALLOCATE AP_ABEND

MC_SEND_ERROR

TP_ENDED

これらの動詞のいずれかを発行すると、セマフォがクリアされます。

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

セカンダリリターンコード。割り当て要求で指定されたユーザー id またはパスワードがパートナー 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

セカンダリリターンコード。要求されたパートナー TP を開始できなかったため、リモート LU は割り当て要求を拒否しました。 条件は永続的です。 エラーの理由が、リモート ノードでログに記録されている可能性があります。 エラーが修正されるまで、割り当てを再試行しないでください。

AP_TRANS_PGM_NOT_AVAIL_RETRY

セカンダリリターンコード。要求されたパートナー TP を開始できなかったため、リモート LU は割り当て要求を拒否しました。 状態は一時的 (タイム アウトなど) である可能性があります。エラーの理由が、リモート ノードでログに記録されている可能性があります。 割り当てを再試行してください。

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
    プライマリリターンコード。メッセージ交換が送信状態になっている間に、パートナー TP が MC_SEND_ERROR を発行しました。 データは切り捨てられませんでした。

    AP_PROG_ERROR_PURGING
    プライマリ リターン コード。RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND、CONFIRM_DEALLOCATE 状態の間に、パートナー TP が発行 MC_SEND_ERROR。 送信されたが、まだ受信していないデータは消去されます。

    AP_STACK_TOO_SMALL
    プライマリ リターン コード。アプリケーションのスタック サイズが小さすぎて動詞を実行できません。 アプリケーションのスタック サイズを増やしてください。

    AP_CONV_BUSY
    プライマリ リターン コード。どの会話でも、一度に 1 つの未処理の会話動詞のみを使用できます。 これは、ローカル TP に複数のスレッドが含まれる場合に発生する可能性があります。また、複数のスレッドが同じスレッドを使用して APPC 呼び出 しを発行conv_id

    AP_UNEXPECTED_DOS_ERROR
    プライマリ リターン コード。ローカル TP からの APPC 呼び出しの処理中に、オペレーティング システムから APPC にエラーが返されました。 オペレーティング システムのリターン コードは、secondary_rc 経由で返されます。 これは、Intel バイトスワップ順で表示されます。 問題が解決しない場合は、システム管理者に問い合わせてください。

    AP_DEALLOC_ABEND
    プライマリ リターン コード。次のいずれかの理由により、会話のデロケーションが取り下がっています。

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

  • パートナー TP が、1 つの THE を検出し、パートナー LU が要求 に対して MC_DEALLOCATEしました。

解説

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

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

    ローカル TP では、データの完全な単位を受信するために、受信動詞を数回発行する必要がある場合があります。 データの完全な単位を受け取った後、ローカル TP でデータを操作できます。 受信動詞は、MC_RECEIVE_AND_POST、MC_RECEIVE_AND_WAIT、およびMC_RECEIVE_IMMEDIATE。

  2. ローカル TP は、受信動詞を再度発行します。 これには、次のいずれかの効果があります。

    • パートナー TP がさらに多くのデータを送信した場合、ローカル TP は新しいデータ単位の受信を開始します。

    • パートナー TP がデータの送信を完了した場合、または確認を待機している場合、状態情報 ( what_rcvd を通じて使用可能) は、ローカル TP が通常実行する次のアクションを示します。

    次の手順は、 でローカル TP によって実行されるタスクを示MC_RECEIVE_AND_POST。

を使用MC_RECEIVE_AND_POST

  1. オペレーティング システムWindows、TP は RegisterWindowMessage API を呼び出す、またはセマフォを割り当てる方法で WinAsyncAPPC メッセージ番号を取得します。 アプリケーションがメッセージ メカニズムを使用して通知を受け取る場合は、sema フィールドを NULL Windowsする必要があります。

    ローカル TP がデータのWindows完了すると、APPC はメッセージを送信するか、セマフォをクリアします。

    OS/2 オペレーティング システムの場合、TP は DosSemSet 関数を使用して、セマが指すセマフォを 設定します

    ローカル TP が非同期的にデータを受信している間、セマフォは設定されたままです。 APPC は、ローカル TP がデータの受信を完了するとセマフォをクリアします。

  2. TP の問題MC_RECEIVE_AND_POST。

  3. TP は、 の値を確認 primary_rc

    この primary_rc 場合AP_OK( dptr が指す) 受信バッファーは、パートナー TP からデータを非同期的に受信します。 データを非同期的に受信する間、ローカル TP は次の操作を実行できます。

  4. Windows オペレーティング システムの場合、TP が非同期的にデータの受信を完了すると、APPC は WinAsyncAPPC Windows メッセージを発行するか、セマフォをクリアします。

    OS/2 オペレーティング システムの場合、TP は DosSemWait 関数を使用して、APPC がセマが指すセマフォをクリアするまで 待機します。 TP がデータの非同期受信を完了すると、APPC はセマフォをクリアします。 ローカル TP の待機を防ぐには、APPC がセマフォをクリアするまでセマフォをテストします (Timeout を 0 に設定して DosSemWait を呼び出します)。

  5. TP は、 の新しい値を primary_rc

    指定 primary_rc 場合AP_OKローカル TP は、返された他のパラメーターを調べて、非同期的に受信したデータを操作できます。

    要求primary_rcしない場合AP_OK、secondary_rcと rts_rcvd (受信した要求) だけが意味を持つ必要があります。

    会話状態の効果

    TP がこの動詞を発行する場合、会話は RECEIVE または SEND 状態である必要があります。

    メッセージ MC_RECEIVE_AND_POST状態 の間にメッセージを発行すると、次の効果があります。

  • ローカル LU は、送信バッファー内の情報と SEND インジケーターをパートナー TP に送信します。

  • 会話は、メッセージの状態PENDING_POST変わります。ローカル TP は、パートナー TP から非同期的に情報を受信する準備ができています。

    会話の状態は 2 回変更されます。

  • 動詞が最初に返された後、 primary_rcがAP_OK 場合、会話は状態にPENDING_POSTされます。

  • 動詞が完了すると、次の値に応じて状態が変わります。

    primary_rc パラメーター

    what_rcvd 場合は 、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 RECEIVE
AP_DATA_COMPLETE RECEIVE
AP_DATA_INCOMPLETE RECEIVE
AP_SEND SEND
AP_DATA_COMPLETE_SEND SEND_PENDING

次の表は、 の各値に関連付けられている新しい状態を primary_rc以外の AP_OK。

primary_rc 新しい状態
AP_CANCELED 変更なし
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 RECEIVE
AP_PROG_ERROR_NO_TRUNC RECEIVE
AP_SVC_ERROR_PURGING RECEIVE
AP_SVC_ERROR_NO_TRUNC RECEIVE
AP_PROG_ERROR_TRUNC RECEIVE
AP_SVC_ERROR_TRUNC RECEIVE