다음을 통해 공유


Receive(CPI-C)

Receive 호출(함수 이름 cmrcv)은 파트너 프로그램에서 현재 사용할 수 있는 모든 데이터를 수신합니다. Microsoft Windows의 경우 모든 CPI-C 통신에 대해 백그라운드 스레드를 실행하고 사용자 인터페이스에 대해서만 포그라운드 스레드를 유지합니다.

구문

  
CM_ENTRY Receive(   
unsigned char FAR *conversation_ID,    
unsigned char FAR *buffer,             
CM_INT32 FAR *requested_length,        
CM_INT32 FAR *data_received,           
CM_INT32 FAR *received_length,         
CM_INT32 FAR *status_received,         
CM_INT32 FAR *request_to_send_received,    
CM_INT32 FAR *return_code              
);  

매개 변수

conversation_ID
제공된 매개 변수입니다. 대화의 식별자를 지정합니다. 이 매개 변수의 값은 Initialize_Conversation 또는 Accept_Conversation 반환되었습니다.

buffer
반환된 매개 변수입니다. 로컬 프로그램에서 받은 데이터를 포함할 버퍼의 주소를 지정합니다.

다음 조건이 충족되면 버퍼에 데이터가 포함됩니다.

  • data_received 매개 변수는 CM_NO_DATA_RECEIVED 이외의 값으로 설정됩니다.

  • return_code 매개 변수는 CM_OK 또는 CM_DEALLOCATED_NORMAL 설정됩니다.

    requested_length
    제공된 매개 변수입니다. 로컬 프로그램에서 수신할 데이터의 최대 바이트 수를 나타냅니다. 범위는 0에서 32767까지입니다.

    data_received
    반환된 매개 변수입니다. 프로그램에서 데이터를 수신했는지 여부를 나타냅니다. 가능한 값은 매개 변수 섹션 다음에 나열됩니다.

    received_length
    반환된 매개 변수입니다. 이 수신 호출에서 로컬 프로그램에서 받은 데이터 바이트 수를 나타냅니다. return_code 또는 data_received 프로그램에서 데이터를 받지 못했다고 나타내는 경우 이 숫자는 관련이 없습니다.

    status_received
    반환된 매개 변수입니다. 대화의 상태 변경 내용을 나타냅니다. 가능한 값은 다음과 같습니다. return_code CM_OK 설정되지 않는 한 이러한 코드는 관련이 없습니다. 가능한 값은 매개 변수 섹션 다음에 나열됩니다.

    request_to_send_received
    반환된 매개 변수입니다. 수신 요청 표시기를 지정합니다. 값은 매개 변수 섹션 다음에 나열됩니다.

    return_code
    이 호출에서 반환된 코드입니다. 값은 매개 변수 섹션 다음에 나열됩니다.

data_received 매개 변수에 반환된 값

이러한 코드는 return_code CM_OK 또는 CM_DEALLOCATED_NORMAL 설정되지 않는 한 관련이 없습니다.

CM_DATA_RECEIVED
대화 채우기 특성이 CM_FILL_BUFFER 설정되면 기본 대화에 대해 반환될 수 있습니다. 이는 프로그램이 논리적 형식과 무관하게 데이터를 수신하고 있음을 나타냅니다. 로컬 프로그램은 데이터의 requested_length 또는 끝에 도달할 때까지 데이터를 수신했습니다.

데이터의 끝은 return_code, status_receiveddata_received 매개 변수에 따라 다른 대화 상태를 변경하거나 오류 조건으로 표시됩니다. 대화 수신 유형이 CM_RECEIVE_IMMEDIATE 설정된 경우 수신된 데이터는 파트너 프로그램에서 더 적은 양의 데이터가 도착한 경우 requested_length 미만일 수 있습니다.

CM_COMPLETE_DATA_RECEIVED
매핑된 대화에서 는 로컬 프로그램이 전체 데이터 레코드 또는 데이터 레코드의 마지막 부분을 수신했음을 나타냅니다.

채우기 특성이 CM_FILL_LL 설정된 기본 대화에서 이 값은 로컬 프로그램에서 전체 논리 레코드 또는 논리 레코드의 끝을 수신했음을 나타냅니다.

CM_INCOMPLETE_DATA_RECEIVED
매핑된 대화에서 는 로컬 프로그램이 불완전한 데이터 레코드를 수신했음을 나타냅니다. requested_length 매개 변수는 데이터 레코드의 길이보다 작은 값을 지정했습니다(레코드를 읽는 첫 번째 Receive가 아닌 경우 데이터 레코드의 나머지 부분보다 작음). 받은 데이터의 양은 requested_length 매개 변수와 같습니다.

채우기 특성이 CM_FILL_LL 설정된 기본 대화에서 이 값은 로컬 프로그램에서 불완전한 논리적 레코드를 수신했음을 나타냅니다. 받은 데이터의 양은 requested_length 매개 변수와 같습니다. (수신된 데이터가 잘린 경우 데이터의 길이는 requested_length 미만입니다.)

이 값을 받으면 로컬 프로그램은 일반적으로 Receive 를 다시 실행하여 레코드의 다음 부분을 받습니다.

CM_NO_DATA_RECEIVED
프로그램에서 데이터를 받지 못했습니다.

return_code 매개 변수가 CM_OK 설정된 경우 status_received 매개 변수를 통해 상태 정보를 사용할 수 있습니다.

status_received 매개 변수에 반환된 값

CM_NO_STATUS_RECEIVED
이 통화에서 상태 변경 내용이 수신되지 않았습니다.

CM_SEND_RECEIVED
파트너 프로그램의 경우 대화가 RECEIVE 상태로 진입했음을 나타냅니다. 로컬 프로그램의 경우 이 호출에서 데이터가 수신되지 않은 경우 대화가 SEND 상태가 되거나 이 호출에서 데이터가 수신된 경우 SEND_PENDING 상태입니다.

이 값을 받으면 로컬 프로그램은 일반적으로 Send_Data 사용하여 데이터 보내기를 시작합니다.

CM_CONFIRM_DEALLOC_RECEIVED
파트너 프로그램이 요청된 확인과 함께 할당 취소를 발급했음을 나타냅니다. 로컬 프로그램의 경우 대화는 이제 CONFIRM_DEALLOCATE 상태입니다.

이 값을 받으면 로컬 프로그램에서 일반적으로 Confirmed 호출을 실행합니다.

CM_CONFIRM_RECEIVED
파트너 프로그램에서 Confirm 호출을 실행했음을 나타냅니다. 로컬 프로그램의 경우 대화가 CONFIRM 상태입니다.

이 값을 받으면 로컬 프로그램에서 일반적으로 Confirmed 호출을 실행합니다.

CM_CONFIRM_SEND_RECEIVED
파트너 프로그램의 경우 대화가 RECEIVE 상태가 되었으며 로컬 프로그램에서 확인 요청을 수신했음을 나타냅니다. 로컬 프로그램의 경우 대화는 이제 CONFIRM_SEND 상태입니다.

프로그램은 일반적으로 Confirmed 호출을 실행하여 응답합니다. Confirmed 호출을 성공적으로 실행하면 대화가 로컬 프로그램의 SEND 상태로 변경됩니다.

request_to_send_received 매개 변수에 반환된 값

CM_REQ_TO_SEND_RECEIVED
파트너 프로그램은 로컬 프로그램에 대화를 RECEIVE 상태로 변경하도록 요청하는 Request_To_Send 호출을 실행했습니다.

CM_REQ_TO_SEND_NOT_RECEIVED
파트너 프로그램에서 Request_To_Send 호출을 실행하지 않았습니다. return_code 매개 변수가 CM_PROGRAM_PARAMETER_CHECK 또는 CM_PROGRAM_STATE_CHECK 설정되면 이 값은 관련이 없습니다.

return_code 매개 변수에 반환된 값

CM_OK
기본 반환 코드; 호출이 성공적으로 실행되었습니다.

CM_OPERATION_NOT_ACCEPTED
기본 반환 코드; 이 대화에 대한 이전 작업이 완료되지 않았습니다.

CM_OPERATION_INCOMPLETE
기본 반환 코드; 작업이 완료되지 않았으며(처리 모드는 차단 해제에만 해당) 아직 진행 중입니다. 프로그램은 Wait_For_Conversation 실행하여 작업 완료를 기다리거나 Cancel_Conversation 작업 및 대화를 취소할 수 있습니다. Specify_Windows_Handle 호출된 경우 애플리케이션은 Windows® 메시지의 알림을 기다리며 Wait_For_Conversation 호출하지 않아야 합니다.

CM_UNSUCCESSFUL
기본 반환 코드; 수신 유형은 CM_RECEIVE_IMMEDIATE 설정되며 파트너 프로그램에서 즉시 사용할 수 있는 데이터는 없습니다.

CM_DEALLOCATED_NORMAL
기본 반환 코드; 대화의 할당이 정상적으로 취소되었습니다. 파트너 프로그램은 대화 할당 취소 유형을 CM_DEALLOCATE_FLUSH 설정하거나 CM_NONE 지정된 대화의 동기화 수준으로 CM_DEALLOCATE_SYNC_LEVEL 할당 취소를 실행했습니다.

CM_PROGRAM_PARAMETER_CHECK
기본 반환 코드; 다음 중 하나가 발생했습니다.

  • conversation_ID 지정한 값이 잘못되었습니다.

  • requested_length 지정한 값이 범위를 벗어났습니다(32767보다 큼).

    프로그램에서 이 반환 코드를 받으면 반환된 다른 매개 변수가 유효하지 않습니다.

    CM_PROGRAM_STATE_CHECK
    기본 반환 코드; 다음 중 하나가 발생했습니다.

  • 수신 유형이 CM_RECEIVE_AND_WAIT 설정되고 대화 상태가 RECEIVE, SEND 또는 SEND_PENDING 아닙니다.

  • 수신 유형이 CM_RECEIVE_IMMEDIATE 설정되고 대화 상태가 RECEIVE가 아닙니다.

  • 기본 대화에서 대화는 SEND 상태이고 수신 유형은 CM_RECEIVE_AND_WAIT 설정되며 프로그램이 논리적 레코드 보내기를 완료하지 않았습니다.

    프로그램에서 이 반환 코드를 받으면 반환된 다른 매개 변수가 유효하지 않습니다.

    CM_PRODUCT_SPECIFIC_ERROR
    기본 반환 코드; 제품별 오류가 발생하여 제품 오류 로그에 기록되었습니다.

    CM_CONVERSATION_TYPE_MISMATCH
    기본 반환 코드; LU(파트너 논리 단위) 또는 프로그램은 할당 요청에 지정된 대화 유형(기본 또는 매핑됨)을 지원하지 않습니다.

    CM_PIP_NOT_SPECIFIED_CORRECTLY
    기본 반환 코드; 할당 요청이 비 CPI-C LU 6.2 TP(트랜잭션 프로그램)에 의해 거부되었습니다. 파트너 프로그램에는 CPI-C에서 지원하지 않는 하나 이상의 PIP 데이터 변수가 필요합니다.

    CM_SECURITY_NOT_VALID
    기본 반환 코드; 할당 요청에 지정된 사용자 식별자 또는 암호가 파트너 LU에서 수락되지 않았습니다.

    CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
    기본 반환 코드; 파트너 프로그램은 할당 요청에 지정된 동기화 수준을 지원하지 않습니다.

    CM_TPN_NOT_RECOGNIZED
    기본 반환 코드; 파트너 LU가 할당 요청에 지정된 프로그램 이름을 인식하지 못합니다.

    CM_TP_NOT_AVAILABLE_NO_RETRY
    기본 반환 코드; 파트너 LU는 영구 조건으로 인해 할당 요청에 지정된 프로그램을 시작할 수 없습니다. 오류의 원인이 원격 노드에 기록될 수 있습니다. 오류가 수정될 때까지 할당을 다시 시도하지 마세요.

    CM_TP_NOT_AVAILABLE_RETRY
    기본 반환 코드; 파트너 LU는 임시 조건으로 인해 할당 요청에 지정된 프로그램을 시작할 수 없습니다. 오류의 원인이 원격 노드에 기록될 수 있습니다. 할당을 다시 시도하세요.

    CM_PROGRAM_ERROR_NO_TRUNC
    기본 반환 코드; SEND 상태이거나 오류 방향이 CM_SEND_ERROR 설정된 SEND_PENDING 상태인 동안 파트너 프로그램은 Send_Error. 데이터가 잘리지 않았습니다.

    CM_PROGRAM_ERROR_PURGING
    기본 반환 코드; 다음 중 하나가 발생했습니다.

  • RECEIVE 또는 CONFIRM 상태인 동안 파트너 프로그램이 Send_Error. 전송되었지만 아직 수신되지 않은 데이터는 제거됩니다.

  • 오류 방향이 CM_RECEIVE_ERROR 설정된 SEND_PENDING 상태에서 파트너 프로그램이 Send_Error. 데이터가 제거되지 않았습니다.

    CM_RESOURCE_FAILURE_NO_RETRY
    기본 반환 코드; 다음 중 하나가 발생했습니다.

  • 대화는 영구적 인 조건으로 인해 조기에 종료되었습니다. 오류가 수정될 때까지 다시 시도하지 마세요.

  • 파트너 프로그램은 정상적으로 종료하기 전에 대화의 할당을 취소하지 않았습니다.

    CM_RESOURCE_FAILURE_RETRY
    기본 반환 코드; 모뎀 오류와 같은 임시 조건으로 인해 대화가 조기에 종료되었습니다. 대화를 다시 시도합니다.

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

  • 원격 프로그램에서 CM_DEALLOCATE_ABEND 형식 매개 변수 집합을 사용하여 할당 취소 를 실행했거나 원격 LU가 원격 프로그램 비정상 종료 조건으로 인해 할당 취소를 실행했습니다. 호출이 실행되었을 때 원격 프로그램에 대한 대화가 RECEIVE 상태이면 로컬 프로그램에서 전송하고 원격 프로그램에서 아직 받지 못한 정보가 제거됩니다.

  • 원격 TP는 정상적으로 종료되었지만 종료하기 전에 대화의 할당을 취소하지 않았습니다. 원격 LU의 노드 서비스가 원격 TP를 대신하여 대화의 할당을 취소했습니다.

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

  • 파트너 프로그램에서 형식 매개 변수가 ABEND_SVC 설정된 Deallocate 를 발급했습니다.

  • 파트너 프로그램은 종료하기 전에 대화의 할당을 취소하지 않았습니다.

    로컬 프로그램에서 이 호출을 실행할 때 파트너 프로그램에 대한 대화가 RECEIVE 상태이면 로컬 프로그램에서 보낸 데이터와 파트너 프로그램에서 아직 받지 못한 데이터가 제거됩니다.

    CM_DEALLOCATED_ABEND_TIMER
    기본 반환 코드; 파트너 프로그램에서 형식 매개 변수가 ABEND_TIMER 설정된 Deallocate 를 실행했기 때문에 대화의 할당이 취소되었습니다. 로컬 프로그램에서 이 호출을 실행할 때 파트너 프로그램에 대한 대화가 RECEIVE 상태이면 로컬 프로그램에서 보낸 데이터와 파트너 프로그램에서 아직 받지 못한 데이터가 제거됩니다.

    CM_SVC_ERROR_PURGING
    기본 반환 코드; SEND 상태인 동안 파트너 프로그램 또는 파트너 LU는 형식 매개 변수가 SVC로 설정된 Send_Error 발급했습니다. 파트너 프로그램에 전송된 데이터가 제거되었을 수 있습니다.

    CM_SVC_ERROR_NO_TRUNC
    기본 반환 코드; SEND 상태인 동안 파트너 프로그램 또는 파트너 LU는 형식 매개 변수가 SVC로 설정된 Send_Error 발급했습니다. 파트너 프로그램에 전송된 데이터가 제거되었을 수 있습니다.

    CM_PROGRAM_ERROR_TRUNC
    기본 반환 코드; SEND 상태에서 전체 논리 레코드 보내기를 완료하기 전에 파트너 프로그램에서 Send_Error. 로컬 프로그램이 수신 호출을 통해 논리 레코드의 첫 번째 부분을 수신했을 수 있습니다.

    CM_SVC_ERROR_TRUNC
    기본 반환 코드; RECEIVE 또는 CONFIRM 상태인 동안 파트너 프로그램 또는 파트너 LU는 전체 논리 레코드 전송을 완료하기 전에 형식 매개 변수가 SVC로 설정된 Send_Error 발급했습니다. 로컬 프로그램이 논리 레코드의 첫 번째 부분을 수신했을 수 있습니다.

    상태 변경

    대화는 RECEIVE, SEND 또는 SEND_PENDING 상태일 수 있습니다.

    receive_type CM_RECEIVE_IMMEDIATE 설정된 경우 대화는 RECEIVE 상태여야 합니다.

    대화가 SEND 또는 SEND_PENDING 상태인 동안 수신 을 실행하면 로컬 LU가 송신 버퍼의 정보와 송신 표시기를 파트너 프로그램에 보냅니다. data_receivedstatus_received 따라 대화가 로컬 프로그램의 RECEIVE 상태로 변경될 수 있습니다.

    새 대화 상태는 다음을 통해 결정됩니다.

  • 프로그램이 호출을 발급할 때 대화의 상태입니다.

  • return_code 매개 변수입니다.

  • data_received 및 status_received 매개 변수입니다.

    현재 사용할 수 있는 데이터가 없고 수신 유형( Set_Receive_Type 설정)이 CM_RECEIVE_AND_WAIT 설정된 경우 로컬 프로그램은 데이터가 도착할 때까지 기다립니다. 수신 유형이 CM_RECEIVE_IMMEDIATE 설정되면 로컬 프로그램은 대기하지 않습니다.

    데이터를 받는 프로세스는 다음과 같습니다.

  • 로컬 프로그램은 전체 데이터 단위 수신이 완료될 때까지 Receive 호출을 발급합니다. 전체 데이터 단위를 받으려면 로컬 프로그램에서 수신을 여러 번 실행해야 할 수 있습니다. data_received 매개 변수는 데이터 수신이 완료되었는지 여부를 나타냅니다.

    수신된 데이터는 다음과 같습니다.

    • 매핑된 대화에서 전송된 하나의 데이터 레코드입니다.

    • 대화 채우기 특성이 CM_FILL_LL 설정된 기본 대화에서 전송되는 하나의 논리적 레코드입니다.

    • 채우기 특성이 CM_FILL_BUFFER 설정된 기본 대화에서 논리 레코드 형식과 독립적으로 수신된 데이터의 버퍼입니다.

      전체 데이터 단위가 수신되면 로컬 프로그램에서 데이터를 조작할 수 있습니다.

  • 로컬 프로그램에서는 status_received 통해 받은 제어 정보에 따라 수행할 다음 작업을 결정합니다. 로컬 프로그램은 컨트롤 정보를 수신하기 위해 Receive 를 다시 발생해야 할 수 있습니다.

    대화 유형은 Set_Conversation_Type 의해 설정됩니다. 채우기 특성은 Set_Fill 의해 설정됩니다.

    다음 표에는 Receive가 RECEIVE 상태의 대화와 함께 실행되고 return_code CM_OK 때 발생할 수 있는 상태 변경 내용이 요약되어 있습니다.

data_received status_received 새 상태
CM_DATA_RECEIVED CM_NO_STATUS_RECEIVED 변경 내용 없음
수신된 CM_COMPLETE_DATA_ CM_NO_STATUS_RECEIVED 변경 내용 없음
수신된 CM_INCOMPLETE_DATA_ CM_SEND_RECEIVED SEND_PENDING
CM_NO_DATA_RECEIVED CM_SEND_RECEIVED SEND

return_code CM_UNSUCCESSFUL 설정되면 receive_type CM_RECEIVE_IMMEDIATE 설정되고 데이터를 사용할 수 없으므로 상태 변경이 없습니다.

다음 표에는 SEND 상태의 대화에서 Receive 가 실행되고 return_code CM_OK 때 발생할 수 있는 상태 변경 내용이 요약되어 있습니다.

data_received status_received 새 상태
CM_DATA_RECEIVED CM_NO_STATUS_RECEIVED RECEIVE
수신된 CM_COMPLETE_DATA_ CM_NO_STATUS_RECEIVED RECEIVE
수신된 CM_INCOMPLETE_DATA_ CM_SEND_RECEIVED SEND_PENDING
CM_NO_DATA_RECEIVED CM_SEND_RECEIVED 변경 내용 없음

다음 표에서는 SEND_PENDING 상태에서 대화를 통해 Receive가 실행되고 return_code CM_OK 때 발생할 수 있는 상태 변경을 요약합니다.

data_received status_received 새 상태
CM_DATA_RECEIVED CM_NO_STATUS_RECEIVED RECEIVE
수신된 CM_COMPLETE_DATA_ CM_NO_STATUS_RECEIVED RECEIVE
수신된 CM_INCOMPLETE_DATA_ CM_SEND_RECEIVED 변경 내용 없음
CM_NO_DATA_RECEIVED CM_SEND_RECEIVED SEND

다음 topics 허용되는 상태에서 Receive가 실행될 때 발생할 수 있는 상태 변경 내용을 요약합니다.

섹션 내용