次の方法で共有


RECEIVE_AND_POST

RECEIVE_AND_POST動詞は、アプリケーション データと状態情報を非同期的に受け取ります。 これにより、ローカル・トランザクション・プログラム (TP) は、データがまだローカル論理装置 (LU) に到着している間に処理を続行できます。

非同期 RECEIVE_AND_POST は未処理ですが、同じ会話で次の動詞を発行できます。

  • DEALLOCATE (AP_ABEND_PROG、AP_ABEND_SVC、またはAP_ABEND_TIMER)

  • GET_ATTRIBUTES

  • GET_TYPE

  • REQUEST_TO_SEND

  • SEND_ERROR

  • TEST_RTS

  • TP_ENDED

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

    次の構造体では、 RECEIVE_AND_POST 動詞で使用される動詞制御ブロック (VCB) について説明します。

構文

  
struct 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       fill;  
    unsigned char       rts_rcvd;  
    unsigned char       reserv4;  
    unsigned short      max_len;  
    unsigned short      dlen;  
    unsigned char FAR * dptr;  
    unsigned char FAR * sema;  
    unsigned char       reserv5;  
};   

メンバー

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

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 を指定し、データは状態インジケーターの前の最後の論理レコードです。

    注ぐ
    指定されたパラメーター。 ローカル TP がデータを受信する方法を指定します。

    AP_BUFFERを使用して、 max_lenで指定 されたバイト数に達するまで、またはデータの終わりまで、ローカル TP がデータを受信することを示します。 論理レコード形式に関係なく、データが受信されます。

    AP_LLを使用して、論理レコード形式でデータを受信することを示します。 受信できるデータは次のとおりです。

  • 完全な論理レコード。

  • 論理レコード のmax_len バイト部分。

  • 論理レコードの末尾

    rts_rcvd
    返されたパラメーター。 パートナー TP が REQUEST_TO_SEND発行したかどうかを示します。 使用可能な値は次のとおりです。

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

  • AP_NOは、パートナー TP が REQUEST_TO_SENDを発行しなかったことを示します。

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

    この値は、受信したデータを格納するバッファーの長さを超えてはなりません。 dptr のオフセットとmax_lenの値は、データ セグメントのサイズを超えてはなりません。

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

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

    Microsoft® Windows® の場合、データ バッファーは静的データ領域またはグローバルに割り当てられた領域に配置できます。 データ バッファーは、この領域内に完全に収まる必要があります。

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

    what_rcvd パラメーターによって返される値

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

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

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

  • AP_DATAは、fill が AP_BUFFER に設定されている場合、RECEIVE_AND_POSTがこの値を返すことができることを示します。 ローカル TP は、 max_len またはデータの末尾に達するまでデータを受信しました。 詳細については、このトピックの「解説」を参照してください。

  • AP_DATA_COMPLETEは、 RECEIVE_AND_POSTの場合、ローカル TP が完全なデータ レコードまたはデータ レコードの最後の部分を受信したことを示します。

    塗りつぶしがAP_LLに設定されたRECEIVE_AND_POSTの場合、この値は、ローカル TP が完全な論理レコードまたは論理レコードの末尾を受信したことを示します。

    この値を受け取ると、ローカル TP は通常 、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 によって発行された DEALLOCATE に応答して会話が割り当て解除されました。

  • AP_DATA_INCOMPLETEは、 RECEIVE_AND_POSTの場合、ローカル TP が不完全なデータ レコードを受信したことを示します。 max_len パラメーターは、データ レコードの長さより小さい値を指定しました (レコードを読み取る最初の受信動詞でない場合は、データ レコードの残りの部分より小さい値)。

    塗りつぶしがAP_LLに設定されたRECEIVE_AND_POSTの場合、この値は、ローカル TP が不完全な論理レコードを受信したことを示します。

    この値を受け取ると、ローカル TP は通常 、レコードの次の部分を 受信するためにRECEIVE_AND_POSTを再発行 (または別の受信動詞を発行) します。

  • 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の組み合わせです。

AP_DATA_CONFIRM_DEALLOCATE
プライマリ リターン コード。これは、AP_DATAとAP_CONFIRM_DEALLOCATEの組み合わせです。

AP_DEALLOC_NORMAL
プライマリ リターン コード。パートナー 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_INVALID_SEMAPHORE_HANDLE

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

APPC では、無効なセマフォ ハンドルをすべてトラップすることはできません。 TP が不適切な RAM セマフォ ハンドルを渡すと、保護違反が発生します。

AP_RCV_AND_POST_BAD_FILL

セカンダリ リターン コード。 fill パラメーターが無効な値に設定されました。

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

AP_RCV_AND_POST_BAD_STATE

セカンダリ リターン コード。TP がこの動詞を発行したときに、会話が RECEIVE または SEND 状態にありません。

AP_RCV_AND_POST_NOT_LL_BDY

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

AP_CANCELED
プライマリ リターン コード。ローカル TP によって次のいずれかの動詞が発行され、 RECEIVE_AND_POSTが取り消されました。

dealloc_typeを AP_ABEND_PROG、AP_ABEND_SVC、または AP_ABEND_TIMER に設定した DEALLOCATE

SEND_ERROR

TP_ENDED

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

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

セカンダリ リターン コード。割り当て要求で指定されたユーザー 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

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

AP_TRANS_PGM_NOT_AVAIL_RETRY

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

AP_COMM_SUBSYSTEM_ABENDED
プライマリ リターン コード。は、次のいずれかの条件を示します。

  • この会話で使用されたノードで、異常終了が発生しました。

  • TP と PU 2.1 ノード間の接続が切断されました (LAN エラー)。

  • TP のコンピューターの SnaBase で、異常終了が発生しました。

    システム管理者は、エラー・ログを調べて、異常終了の理由を判別する必要があります。

    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
    プライマリ リターン コード。会話が SEND 状態の間にAP_PROGに設定err_type、パートナー TP が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 は、次のプロセスを通じてデータを受信します。

  1. ローカル TP は、データの完全な単位の受信が完了するまで、受信動詞を発行します。 受信できるデータは次のとおりです。

    • 1 つの論理レコード。

    • 論理レコード形式とは無関係に受信したデータのバッファー。

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

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

    • パートナー TP がより多くのデータを送信した場合、ローカル TP は新しいデータユニットの受信を開始します。

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

    次の手順は、 RECEIVE_AND_POSTを使用してローカル TP によって実行されるタスクを示しています。

RECEIVE_AND_POSTを使用するには

  1. Microsoft Windows® オペレーティング システムの場合、TP は RegisterWindowMessage API を呼び出すかセマフォを割り当てることによって WinAsyncAPPC メッセージ番号を取得します。 アプリケーションが Windows メッセージ メカニズムを通じて通知を受け取る場合は、 sema フィールドを NULL に設定する必要があります。

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

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

  2. TP の問題 RECEIVE_AND_POST

  3. TP は 、primary_rcの値を確認します。

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

    • この会話に関連しないタスクを実行します。

    • 問題のREQUEST_TO_SEND

    • GET_TYPE、GET_ATTRIBUTES、またはTEST_RTSを発行して、この会話関する情報収集します。

    • dealloc_typeをAP_ABEND_PROG、AP_ABEND_SVC、またはAP_ABEND_TIMERに設定して DEALLOCATE を発行して、RECEIVE_AND_POSTを途中で取り消す。SEND_ERROR;またはTP_ENDED

      ただし、 primary_rc がAP_OKされていない場合、 RECEIVE_AND_POST は失敗しています。 この場合、ローカル TP は次の 2 つのタスクを実行しません。

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

  5. TP は、primary_rcの新しい値を確認 します

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

    primary_rcがAP_OKされていない場合は、secondary_rcrts_rcvd (受信要求) のみが意味を持つ。

    会話状態の効果

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

    会話が SEND 状態の間に RECEIVE_AND_POST を発行すると、次の効果があります。

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

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

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

  • 動詞が最初に戻ると、 primary_rcに AP_OKが含まれている場合、会話はPENDING_POST状態に変わります。

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

    primary_rc パラメーター

    primary_rcがAP_OKされている場合のwhat_rcvd パラメーター

    次の表は、primary_rcがAP_OKされたときにwhat_rcvdの各値に関連付けられている新しい状態を示しています。

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 確認する
AP_DATA_COMPLETE_CONFIRM 確認する
AP_DATA_CONFIRM 確認する
AP_DATA 受ける
AP_DATA_COMPLETE 受ける
AP_DATA_INCOMPLETE 受ける
AP_SEND 送信
AP_DATA_COMPLETE_SEND SEND_PENDING

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

primary_rc 新しい状態
AP_CANCELED 変更なし
AP_CONV_FAILURE_RETRY リセット
AP_CONV_FAILURE_NO_RETRY リセット
AP_DEALLOC_ABEND リセット
AP_DEALLOC_ABEND_PROG リセット
AP_DEALLOC_ABEND_SVC リセット
AP_DEALLOC_ABEND_TIMER リセット
AP_DEALLOC_NORMAL リセット
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 受ける

基本的な会話のデータの終わり

ローカル TP が RECEIVE_AND_POST を発行し、 塗りつぶし を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_AND_POST再発行します。 新しい primary_rc にAP_OKが含まれており、 what_rcvd にAP_DATAが含まれている場合、データの末尾に到達していません。 ただし、データの末尾に達した場合、 primary_rc または what_rcvd はデータの終了の原因を示します。

トラブルシューティング

次のいずれかの状況が発生した場合、ローカル TP は無期限に待機できます。

  • Windows オペレーティング システムの場合、ローカル TP は RECEIVE_AND_POST 要求を発行しますが、パートナー TP がデータを送信していないか、初期 primary_rc がAP_OKされていません。

  • OS/2 オペレーティング システムの場合、ローカル TP は DosSemWait 関数呼び出しを発行しますが、パートナー TP がデータを送信していないか、初期 primary_rc がAP_OKされていません。

    これは、APPC が Windows メッセージを発行したり、セマフォをクリアしたりしないためです。

    次のいずれかの primary_rc パラメーターの条件が発生した場合、APPC はセマフォをクリアしません。

    AP_INVALID_SEMAPHORE_HANDLE

    AP_INVALID_VERB_SEGMENT

    AP_STACK_TOO_SMALL

    what_rcvdをテストするには、max_lenを 0 に設定してRECEIVE_AND_POSTを発行します。そのため、ローカル TP は、パートナー TP が送信するデータを持っているか、確認をシークするか、会話の状態を変更したかを判断できます。