다음을 통해 공유


RECEIVE_AND_POST

RECEIVE_AND_POST 동사는 애플리케이션 데이터와 상태 정보를 비동기적으로 수신합니다. 이렇게 하면 데이터가 여전히 LU(로컬 논리 단위)에 도착하는 동안 TP(로컬 트랜잭션 프로그램)에서 처리를 진행할 수 있습니다.

비동기 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;  
};   

구성원

opcode
제공된 매개 변수입니다. 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
제공된 매개 변수입니다. 데이터와 대화 상태 표시기가 하나의 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가 AP_SYNC_LEVEL 설정된 dealloc_typeDEALLOCATE를 발급했음을 나타냅니다. ALLOCATE에서 설정한 대화의 동기화 수준은 AP_CONFIRM_SYNC_LEVEL. 이 값을 받으면 로컬 TP는 일반적으로 CONFIRMED를 발급합니다.

  • AP_CONFIRM_SEND 파트너 TP가 AP_SYNC_LEVEL 설정된 ptr_typePREPARE_TO_RECEIVE 발급했음을 나타냅니다. ALLOCATE에서 설정한 대화의 동기화 수준은 AP_CONFIRM_SYNC_LEVEL. 이 값을 받으면 로컬 TP는 일반적으로 CONFIRMED를 발급하고 데이터를 보내기 시작합니다.

  • AP_CONFIRM_WHAT_RECEIVED 파트너 TP가 CONFIRM를 발급했음을 나타냅니다. 이 값을 받으면 로컬 TP는 일반적으로 CONFIRMED를 발급합니다.

  • AP_DATA 채우기가 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는 AP_NONE 지정된 대화의 동기화 수준을 AP_FLUSH 또는 AP_SYNC_LEVEL dealloc_type 설정된 DEALLOCATE를 발급했습니다.

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

보조 반환 코드; 할당 요청에 지정된 사용자 식별자 또는 암호가 파트너 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가 여러 노드로 구성된 호스트 통합 서버 클라이언트 시스템에 대해 이 반환 코드를 생성하는 경우 다음과 같이 두 개의 보조 반환 코드가 있습니다.

    0xF0000001

    보조 반환 코드; 노드가 시작되지 않았습니다.

    0xF0000002

    보조 반환 코드; 하나 이상의 노드가 시작되었지만 로컬 LU( TP_STARTED 실행될 때)가 활성 노드에서 구성되지 않았습니다. 문제는 다음 중 하나일 수 있습니다.

  • 로컬 LU가 있는 노드가 시작되지 않았습니다.

  • 로컬 LU가 구성되지 않았습니다.

    AP_CONV_FAILURE_NO_RETRY
    기본 반환 코드; 세션 프로토콜 오류와 같은 영구적인 조건으로 인해 대화가 종료되었습니다. 시스템 관리자는 시스템 오류 로그를 검사하여 오류의 원인을 확인해야 합니다. 오류가 수정될 때까지 대화를 다시 시도하지 마세요.

    AP_CONV_FAILURE_RETRY
    기본 반환 코드; 일시적인 오류로 인해 대화가 종료되었습니다. TP를 다시 시작하여 문제가 다시 발생하는지 확인합니다. 이 경우 시스템 관리자는 오류 로그를 검사하여 오류의 원인을 확인해야 합니다.

    AP_CONVERSATION_TYPE_MIXED
    기본 반환 코드; TP는 기본 및 매핑된 대화 동사를 모두 실행했습니다. 단일 대화에서 하나의 형식만 발급할 수 있습니다.

    AP_INVALID_VERB_SEGMENT
    기본 반환 코드입니다. VCB가 데이터 세그먼트의 끝을 넘어 확장되었습니다.

    AP_PROG_ERROR_NO_TRUNC
    기본 반환 코드; 대화가 SEND 상태인 동안 파트너 TP가 AP_PROG err_type 설정된 SEND_ERROR 발급했습니다. 데이터가 잘리지 않았습니다.

    AP_PROG_ERROR_PURGING
    기본 반환 코드; RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND 또는 CONFIRM_DEALLOCATE 상태에서 파트너 TP는 AP_PROG 설정된 err_type SEND_ERROR 발급했습니다. 전송되었지만 아직 수신되지 않은 데이터는 제거됩니다.

    AP_PROG_ERROR_TRUNC
    기본 반환 코드; SEND 상태에서 불완전한 논리 레코드를 보낸 후 파트너 TP는 err_type AP_PROG 설정된 SEND_ERROR 발급했습니다. 로컬 TP는 수신 동사를 통해 논리 레코드의 첫 번째 부분을 수신했을 수 있습니다.

    AP_STACK_TOO_SMALL
    기본 반환 코드입니다. 애플리케이션의 스택 크기가 너무 작아서 동사를 실행할 수 없습니다. 애플리케이션의 스택 크기를 늘리세요.

    AP_CONV_BUSY
    기본 반환 코드; 모든 대화에서 한 번에 하나의 뛰어난 대화 동사만 있을 수 있습니다. 로컬 TP에 여러 스레드가 있고 둘 이상의 스레드가 동일한 conv_id 사용하여 APPC 호출을 실행하는 경우에 발생할 수 있습니다.

    AP_UNEXPECTED_DOS_ERROR
    기본 반환 코드입니다. 로컬 TP의 APPC 호출을 처리하는 동안 운영 체제가 APPC에 오류를 반환했습니다. 운영 체제 반환 코드는 secondary_rc를 통해 반환됩니다. Intel 바이트 스와핑 순서로 표시됩니다. 문제가 지속되면 시스템 관리자에게 문의하세요.

    AP_DEALLOC_ABEND_PROG
    기본 반환 코드; 다음 이유 중 하나로 인해 대화의 할당이 취소되었습니다.

  • 파트너 TP는 AP_ABEND_PROG 설정된 dealloc_typeDEALLOCATE를 발급했습니다.

  • 파트너 TP가 ABEND를 발견하여 파트너 LU가 DEALLOCATE 요청을 보냅니다.

    AP_DEALLOC_ABEND_SVC
    기본 반환 코드; 파트너 TP가 AP_ABEND_SVC 설정된 dealloc_typeDEALLOCATE를 발급했기 때문에 대화의 할당이 취소되었습니다.

    AP_DEALLOC_ABEND_TIMER
    기본 반환 코드; 파트너 TP가 AP_ABEND_TIMER 설정된 dealloc_typeDEALLOCATE를 발급했기 때문에 대화의 할당이 취소되었습니다.

    AP_SVC_ERROR_NO_TRUNC
    기본 반환 코드; SEND 상태인 동안 파트너 TP(또는 파트너 LU)는 err_type AP_SVC 설정된 SEND_ERROR 발급했습니다. 데이터가 잘리지 않았습니다.

    AP_SVC_ERROR_PURGING
    기본 반환 코드; err_type RECEIVE, PENDING_POST , CONFIRM, CONFIRM_SEND 또는 CONFIRM_DEALLOCATE 상태에서 AP_SVC 설정된 SEND_ERROR 발급한 파트너 TP(또는 파트너 LU)입니다. 파트너 TP로 전송된 데이터가 제거되었을 수 있습니다.

    AP_SVC_ERROR_TRUNC
    기본 반환 코드; 송신 상태에서 불완전한 논리 레코드를 보낸 후 파트너 TP(또는 파트너 LU)가 SEND_ERROR 발급했습니다. 로컬 TP가 논리 레코드의 첫 번째 부분을 수신했을 수 있습니다.

설명

로컬 TP는 다음 프로세스를 통해 데이터를 받습니다.

  1. 로컬 TP는 전체 데이터 단위 수신이 완료될 때까지 수신 동사를 발급합니다. 수신된 데이터는 다음과 같습니다.

    • 하나의 논리적 레코드입니다.

    • 논리적 레코드 형식과 독립적으로 수신된 데이터의 버퍼입니다.

      로컬 TP는 전체 데이터 단위를 수신하기 위해 수신 동사를 여러 번 발급해야 할 수 있습니다. 전체 데이터 단위가 수신되면 로컬 TP에서 데이터를 조작할 수 있습니다. 수신 동사는 RECEIVE_AND_POST, RECEIVE_AND_WAITRECEIVE_IMMEDIATE.

  2. 로컬 TP는 수신 동사를 다시 발급합니다. 여기에는 다음 효과 중 하나가 있습니다.

    • 파트너 TP가 더 많은 데이터를 보낸 경우 로컬 TP는 새 데이터 단위를 수신하기 시작합니다.

    • 파트너 TP가 데이터 전송을 완료했거나 확인을 기다리는 경우 상태 정보(what_rcvd 통해 사용 가능)는 로컬 TP가 일반적으로 수행하는 다음 작업을 나타냅니다.

    다음 절차에서는 RECEIVE_AND_POST 사용하여 에서 로컬 TP가 수행하는 작업을 보여 줍니다.

RECEIVE_AND_POST 사용하려면

  1. Microsoft Windows® 운영 체제의 경우 TP는 RegisterWindowMessage API를 호출하거나 세마포를 할당하여 WinAsyncAPPC 메시지 번호를 검색합니다. 애플리케이션이 Windows 메시지 메커니즘을 통해 알림을 받아야 하는 경우 세마 필드를 NULL로 설정해야 합니다.

    APPC는 Windows 메시지를 보내거나 로컬 TP가 데이터 수신을 완료하면 세마포를 지웁니다.

    로컬 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 실행하여 이 대화에 대한 정보를 수집합니다.

    • AP_ABEND_PROG, AP_ABEND_SVC 또는 AP_ABEND_TIMERdealloc_type 설정된DEALLOCATE를 실행하여 RECEIVE_AND_POST 조기에 취소합니다. SEND_ERROR; 또는 TP_ENDED.

      그러나 primary_rc AP_OK 않으면 RECEIVE_AND_POST 실패했습니다. 이 경우 로컬 TP는 다음 두 작업을 수행하지 않습니다.

  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로부터 비동기적으로 정보를 받을 준비가 된 것입니다.

    대화는 상태를 두 번 변경합니다.

  • 동사가 처음 반환되면 primary_rc AP_OK 포함된 경우 대화가 PENDING_POST 상태로 변경됩니다.

  • 동사가 완료된 후 상태는 다음 값에 따라 변경됩니다.

    primary_rc 매개 변수

    primary_rcAP_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 RECEIVE
AP_DATA_COMPLETE RECEIVE
AP_DATA_INCOMPLETE RECEIVE
AP_SEND SEND
AP_DATA_COMPLETE_SEND SEND_PENDING

다음 표에서는 AP_OK 이외의 각 primary_rc 값과 연결된 새 상태를 보여줍니다.

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

기본 대화에 대한 데이터 끝

로컬 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에 보낼 데이터가 있는지, 확인을 구하거나, 대화 상태를 변경했는지 여부를 확인할 수 있습니다.