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_received및data_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_received 및 status_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가 실행될 때 발생할 수 있는 상태 변경 내용을 요약합니다.