다음을 통해 공유


Send_Data(CPI-C)

Send_Data 호출(함수 이름 cmsend)은 파트너 프로그램에 전송하기 위해 LU(로컬 논리 단위)의 송신 버퍼에 데이터를 넣습니다.

구문

  
CM_ENTRY Send_Data(   
  unsigned char FAR *conversation_ID,    
  unsigned char FAR *buffer,             
    CM_INT32 FAR *send_length,             
    CM_INT32 FAR *request_to_send_received,    
    CM_INT32 FAR *return_code              
);  

매개 변수

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

버퍼
제공된 매개 변수입니다. 로컬 RU 송신 버퍼에 넣을 데이터를 포함하는 버퍼의 주소를 지정합니다.

send_length
제공된 매개 변수입니다. 로컬 RU 송신 버퍼에 넣을 데이터 바이트 수를 지정합니다. 범위는 0에서 32767까지입니다.

매핑된 대화의 경우 send_length 0으로 설정된 경우 null 데이터 레코드가 파트너 프로그램에 전송됩니다.

기본 대화의 경우 send_length 0으로 설정된 경우 데이터가 전송되지 않습니다. 버퍼 매개 변수는 관련이 없습니다. 그러나 다른 매개 변수는 처리됩니다.

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 호출된 경우 애플리케이션은 Microsoft® Windows® 메시지의 알림을 기다리며 Wait_For_Conversation 호출하지 않아야 합니다.

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

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

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

  • 이는 기본 대화이며 버퍼 의 처음 두 바이트에 잘못된 논리적 레코드 길이(0x0000, 0x0001, 0x8000 또는 0x8001)가 포함됩니다.

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

  • 대화 상태가 SEND 또는 SEND_PENDING 아닙니다.

  • 기본 대화는 SEND 상태이며 send_type CM_SEND_AND_CONFIRM, CM_SEND_AND_DEALLOCATE 또는 CM_SEND_AND_PREP_TO_RECEIVE 설정됩니다. 그러나 데이터는 논리적 레코드 경계에서 끝나지 않습니다. 이 조건은 deallocate_type CM_DEALLOCATE_ABEND 설정되고 send_type CM_SEND_AND_DEALLOCATE 설정된 경우에만 허용됩니다.

    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_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 설정된 Deallocate 를 실행했거나 원격 프로그램 비정상 종료 조건으로 인해 원격 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 발급했습니다. 파트너 프로그램에 전송된 데이터가 제거되었을 수 있습니다.

    상태 변경

    프로그램이 이 호출을 발급할 때 대화는 SEND 또는 SEND_PENDING 상태여야 합니다.

    다음 표에는 return_code CM_OK 설정되면 가능한 상태 변경 내용이 요약되어 있습니다.

send_type 이전 상태 새 상태
CM_BUFFER_DATA SEND 변경 내용 없음
CM_BUFFER_DATA SEND_PENDING SEND
CM_SEND_AND_FLUSH SEND 변경 내용 없음
CM_SEND_AND_FLUSH SEND_PENDING SEND
CM_SEND_AND_CONFIRM SEND 변경 내용 없음
CM_SEND_AND_CONFIRM SEND_PENDING SEND
CM_SEND_AND_PREP_TO_ RECEIVE 사용할 수 없음 RECEIVE
CM_SEND_AND_DEALLOCATE 사용할 수 없음 RESET

CM_PROGRAM_ERROR_PURGING 또는 CM_SVC_ERROR_PURGING return_code 값의 경우 대화가 RECEIVE 상태로 변경됩니다. 다른 비 CM_OK 값의 경우 대화가 RESET 상태로 변경됩니다.

설명

로컬 RU 송신 버퍼에서 수집된 데이터는 다음 중 하나가 발생할 때 파트너 LU 및 파트너 프로그램으로 전송됩니다.

  • 송신 버퍼가 채워지게 됩니다.

  • 로컬 프로그램은 플러시, 확인 또는 할당 취소 호출 또는 RU 송신 버퍼를 플러시하는 기타 호출을 발급합니다. ( Set_Send_Type 설정되는 일부 송신 형식에는 플러시 기능이 포함됩니다.)

    전송할 데이터는 다음 중 하나일 수 있습니다.

  • 매핑된 대화의 전체 데이터 레코드입니다. 전체 데이터 레코드는 send_length 매개 변수에 지정된 길이의 문자열입니다.

  • 기본 대화의 전체 논리적 레코드 또는 부분입니다. 전체 논리 레코드는 LL 값에 의해 결정됩니다. (하나의 논리적 레코드가 종료되고 새 레코드가 전송될 데이터 문자열의 중간에 시작될 수 있습니다.)

    LU는 보낼 데이터 문자열에서 ASCII와 EBCDIC 간의 변환을 자동으로 수행하지 않습니다. 필요한 경우 프로그램에서 CSV(Common Service Verb) CONVERT 를 사용하여 문자열을 한 문자 집합에서 다른 문자 집합으로 변환할 수 있습니다.