DEALLOCATE 동사는 두 TP(트랜잭션 프로그램) 간의 대화를 할당 취소합니다.
다음 구조체는 DEALLOCATE 동사에서 사용하는 VCB(동사 제어 블록)에 대해 설명합니다.
구문
struct deallocate {
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 char reserv3;
unsigned char dealloc_type;
unsigned short log_dlen;
unsigned char FAR * log_dptr;
void (WINAPI *callback)();
void *correlator;
unsigned char reserv6[4];
};
구성원
opcode
제공된 매개 변수입니다. 동사 작업 코드 AP_B_DEALLOCATE 지정합니다.
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 간에 설정된 대화를 식별합니다. 이 매개 변수의 값은 호출하는 TP의 ALLOCATE 또는 호출된 TP의 RECEIVE_ALLOCATE 반환됩니다.
reserv3
예약된 필드입니다.
dealloc_type
제공된 매개 변수입니다. 할당 취소를 수행하는 방법을 지정합니다.
다음 값 중 하나를 사용하면 대화의 할당이 비정상적으로 취소됩니다.
AP_ABEND_PROG
AP_ABEND_SVC
AP_ABEND_TIMER
로컬 TP가 DEALLOCATE를 발급할 때 대화가 SEND 상태인 경우 APPC는 대화를 할당 취소하기 전에 로컬 LU(논리 단위)의 콘텐츠 전송 버퍼를 파트너 TP에 보냅니다. 대화가 RECEIVE 또는 PENDING_POST 상태인 경우 APPC는 대화를 할당 취소하기 전에 들어오는 데이터를 제거합니다.
애플리케이션 또는 서비스 TP는 트랜잭션이 성공적으로 완료되지 않도록 하는 오류가 발생할 때 AP_ABEND_PROG 지정해야 합니다.
서비스 TP는 파트너 서비스 TP(예: 파트너 서비스 TP에서 보낸 제어 정보의 형식 오류)로 인해 발생하는 오류가 발생할 때 AP_ABEND_SVC 지정해야 합니다. 서비스 TP는 즉시 할당을 취소해야 하는 오류(예: 프로그램을 조기에 종료하는 연산자)가 발생하는 경우 AP_ABEND_TIMER 지정해야 합니다.
AP_FLUSH 대화를 할당 취소하기 전에 로컬 LU의 송신 버퍼의 내용을 파트너 TP에 보냅니다. 이 값은 대화가 SEND 상태인 경우에만 허용됩니다.
AP_SYNC_LEVEL 대화의 동기화 수준( ALLOCATE에 의해 설정됨)을 사용하여 대화 할당을 취소하는 방법을 결정합니다. 이 값은 대화가 SEND 상태인 경우에만 허용됩니다.
대화의 동기화 수준이 AP_NONE 경우 APPC는 대화를 할당 취소하기 전에 로컬 LU의 송신 버퍼의 콘텐츠를 파트너 TP에 보냅니다.
동기화 수준이 AP_CONFIRM_SYNC_LEVEL 경우 APPC는 로컬 LU의 송신 버퍼의 내용과 확인 요청을 파트너 TP에 보냅니다. 파트너 TP로부터 확인을 받으면 APPC는 대화의 할당을 취소합니다. 그러나 파트너 TP가 오류를 보고하는 경우 대화는 할당된 상태로 유지됩니다.
log_dlen
제공된 매개 변수입니다. 오류 로그 파일로 보낼 데이터 바이트 수를 지정합니다. 범위는 0에서 32767까지입니다.dealloc_type AP_ABEND_PGM, AP_ABEND_SVC 또는 AP_ABEND_TIMER 설정된 경우 이 매개 변수를 0보다 큰 숫자로 설정할 수 있습니다. 그렇지 않으면 이 매개 변수는 0이어야 합니다.
log_dptr
제공된 매개 변수입니다. 오류 정보를 포함하는 데이터 버퍼의 주소를 제공합니다. 데이터는 로컬 오류 로그 및 파트너 LU로 전송됩니다.이 매개 변수는 log_dlen 0보다 큰 경우 DEALLOCATE에서 사용됩니다.
Microsoft Windows의 경우 데이터 버퍼는 정적 데이터 영역 또는 전역적으로 할당된 영역에 상주할 수 있습니다. 데이터 버퍼는 이 영역 내에 완전히 맞아야 합니다.
OS/2의 경우 로그 데이터 버퍼는 플래그가 1인 DosAllocSeg 함수에 의해 할당되는 명명되지 않은 공유 세그먼트에 있어야 합니다. 로그 데이터 버퍼는 세그먼트에 완전히 맞아야 합니다.
TP는 오류 데이터의 형식을 GDS 오류 로그 변수로 지정해야 합니다. 자세한 내용은 IBM SNA 설명서를 참조하세요.
콜백
제공된 매개 변수입니다. opext 멤버에 AP_EXTD_VCB 비트가 설정된 경우에만 존재하며 이는 동기화 지점에 대한 지원을 나타냅니다. 이 매개 변수는 사용자가 제공한 콜백 함수의 주소입니다. 이 필드가 NULL이면 알림이 제공되지 않습니다.콜백 루틴의 프로토타입은 다음과 같습니다.
void WINAPI callback_proc(
struct appc_hdr *vcb,
unsigned char tp_id[8],
unsigned long conv_id,
unsigned short type,
void *correlator
);
프로시저의 주소가 APPC DLL에 전달되므로 콜백 프로시저는 모든 이름을 사용할 수 있습니다. 함수에 전달된 매개 변수는 다음과 같습니다.
Vcb
대화의 할당을 취소한 DEALLOCATE 동사 제어 블록에 대한 포인터입니다.
tp_id
할당 취소된 대화를 소유한 TP의 TP 식별자입니다.
conv_id
할당 취소된 대화의 대화 식별자입니다.
형식
콜백을 호출한 메시지 흐름의 형식입니다. 가능한 값은 다음과 같습니다.
AP_DATA_FLOW
세션의 일반 데이터 흐름입니다.
AP_UNBIND
세션이 정상적으로 바인딩되지 않았습니다.
AP_FAILURE
중단으로 인해 세션이 종료되었습니다.
correlator
이 값은 DEALLOCATE 동사에 지정된 상관 관계입니다.
correlator
제공된 매개 변수입니다. AP_EXTD_VCB 비트가 opext 멤버에 설정된 경우에만 존재하며 이는 동기화 지점 API에 대한 지원을 나타냅니다. 이 상관 관계 필드를 사용하면 TP가 콜백 함수에 대한 호출을 자체 내부 데이터 구조와 상호 연결하는 데 사용할 수 있는 값을 지정할 수 있습니다. 이 값은 호출될 때 콜백 루틴의 매개 변수 중 하나로 TP에 반환됩니다.
reserv4
예약된 필드입니다.
반환 코드
AP_OK
기본 반환 코드입니다. 동사가 성공적으로 실행되었습니다.
AP_PARAMETER_CHECK
기본 반환 코드입니다. 매개 변수 오류로 인해 동사가 실행되지 않았습니다.
AP_BAD_CONV_ID
보조 반환 코드; conv_id 값이 APPC에서 할당한 대화 식별자와 일치하지 않습니다.
AP_BAD_TP_ID
보조 반환 코드; tp_id 값이 APPC에서 할당한 TP 식별자와 일치하지 않습니다.
AP_DEALLOC_BAD_TYPE
보조 반환 코드; dealloc_type 매개 변수가 유효한 값으로 설정되지 않았습니다.
AP_DEALLOC_LOG_LL_WRONG
보조 반환 코드; GDS 오류 로그 변수의 LL 필드가 로그 데이터의 실제 길이와 일치하지 않습니다.
AP_INVALID_DATA_SEGMENT
보조 반환 코드; 로그 파일의 오류 데이터가 오류 데이터를 포함하도록 할당된 세그먼트보다 길거나 오류 데이터 버퍼의 주소가 잘못되었습니다.
AP_STATE_CHECK
기본 반환 코드입니다. 동사가 잘못된 상태에서 발행되었으므로 실행되지 않았습니다.
AP_DEALLOC_CONFIRM_BAD_STATE
보조 반환 코드; 대화가 SEND 상태가 아니고 TP가 송신 버퍼를 플러시하고 확인 요청을 보내려고 했습니다. 이 시도는 dealloc_type 값이 AP_SYNC_LEVEL 대화의 동기화 수준이 AP_CONFIRM_SYNC_LEVEL 때문에 발생했습니다.
AP_DEALLOC_FLUSH_BAD_STATE
보조 반환 코드; 대화가 SEND 상태가 아니고 TP가 송신 버퍼를 플러시하려고 했습니다. 이 시도는 dealloc_type의 값이 AP_FLUSH였기 때문에 또는 dealloc_type의 값이 AP_SYNC_LEVEL이고 대화의 동기화 수준이 AP_NONE이었기 때문에 발생했습니다. 두 경우 모두 대화가 SEND 상태여야 합니다.
AP_DEALLOC_NOT_LL_BDY
보조 반환 코드; 대화가 SEND 상태였고 TP가 논리 레코드 보내기를 완료하지 않았습니다. dealloc_type 매개 변수가 AP_SYNC_LEVEL 또는 AP_FLUSH로 설정되었습니다.
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
기본 반환 코드입니다. 동사를 처리하는 동안 필수 구성 요소를 로드하거나 종료할 수 없습니다. 따라서 통신을 수행할 수 없습니다. 정정 작업은 시스템 관리자에게 문의하세요AP_CONV_FAILURE_NO_RETRY
기본 반환 코드; 세션 프로토콜 오류와 같은 영구적인 조건으로 인해 대화가 종료되었습니다. 시스템 관리자는 시스템 오류 로그를 검사하여 오류의 원인을 확인해야 합니다. 오류가 수정될 때까지 대화를 다시 시도하지 마세요.AP_CONV_FAILURE_RETRY
기본 반환 코드; 일시적인 오류로 인해 대화가 종료되었습니다. TP를 다시 시작하여 문제가 다시 발생하는지 확인합니다. 이 경우 시스템 관리자는 오류 로그를 검사하여 오류의 원인을 확인해야 합니다.AP_CONVERSATION_TYPE_MIXED
기본 반환 코드; TP는 기본 및 매핑된 대화 동사를 모두 실행했습니다. 단일 대화에서 하나의 형식만 발급할 수 있습니다.AP_INVALID_VERB_SEGMENT
기본 반환 코드입니다. VCB가 데이터 세그먼트의 끝을 넘어 확장되었습니다.AP_PROG_ERROR_PURGING
기본 반환 코드; RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND 또는 CONFIRM_DEALLOCATE 상태인 동안 파트너 TP는 err_type AP_PROG 설정된 SEND_ERROR 발급했습니다. 전송되었지만 아직 받지 않은 데이터는 제거됩니다.AP_STACK_TOO_SMALL
기본 반환 코드입니다. 애플리케이션의 스택 크기가 너무 작아서 동사를 실행할 수 없습니다. 애플리케이션의 스택 크기를 늘리세요.AP_CONV_BUSY
기본 반환 코드; 모든 대화에서 한 번에 하나의 미해결 대화 동사만 있을 수 있습니다. 로컬 TP에 여러 스레드가 있고 둘 이상의 스레드가 동일한 conv_id 사용하여 APPC 호출을 실행하는 경우에 발생할 수 있습니다.AP_THREAD_BLOCKING
기본 반환 코드입니다. 호출 스레드가 이미 차단 호출에 있습니다.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_PURGING
기본 반환 코드; 수신, PENDING_POST, 확인, CONFIRM_SEND 또는 CONFIRM_DEALLOCATE 상태에 있는 동안 err_type AP_SVC 설정된 SEND_ERROR 발급한 파트너 TP(또는 파트너 LU)입니다. 파트너 TP로 전송된 데이터가 제거되었을 수 있습니다.
설명
dealloc_type 매개 변수의 값에 따라 TP가 DEALLOCATE를 발급할 때 다음 표에 표시된 상태 중 하나에 대화가 있을 수 있습니다.
| dealloc_type | 허용되는 상태 |
|---|---|
| AP_FLUSH | SEND |
| AP_SYNC_LEVEL | SEND |
| AP_ABEND | RESET을 제외한 모든 |
| AP_ABEND_PROG | RESET을 제외한 모든 |
| AP_ABEND_SVC | RESET을 제외한 모든 |
| AP_ABEND_TIMER | RESET을 제외한 모든 |
다음 표에 요약된 상태 변경 내용은 primary_rc 값을 기반으로 합니다.
| primary_rc | 새 상태 |
|---|---|
| AP_OK | RESET |
| AP_ALLOCATION_ERROR | RESET |
| 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_PROG_ERROR_PURGING | RECEIVE |
| AP_SVC_ERROR_PURGING | RECEIVE |
대화를 할당 취소하기 전에 이 동사는 다음 중 하나에 해당하는 작업을 수행합니다.
FLUSH는 로컬 LU의 송신 버퍼의 콘텐츠를 파트너 LU(및 TP)로 전송합니다.
로컬 LU의 송신 버퍼의 내용과 파트너 TP에 확인 요청을 전송하여 확인합니다.
이 동사가 성공적으로 실행되면 대화 식별자가 더 이상 유효하지 않습니다.
LU 6.2 동기화 지점은 암시적 삭제라고 하는 메시지 흐름의 최적화를 사용할 수 있습니다. 프로토콜이 FORGET PS 헤더가 필요하다고 지정하면 세션의 다음 데이터 흐름은 FORGET이 수신되었음을 의미합니다. 정상적인 상황에서 TP는 동기화 지점 대화 중 하나에서 데이터를 받거나 보낼 때 다음 데이터 흐름을 인식합니다.
그러나 마지막 메시지 흐름은 대화의 할당이 취소되어 발생할 수 있습니다. 이 경우 TP는 세션의 다음 데이터 흐름이 발생할 때 인식하지 못합니다. 이 알림을 TP에 제공하기 위해 TP가 호출될 콜백 함수를 등록할 수 있도록 DEALLOCATE 동사가 수정됩니다.
대화에서 사용되는 세션에 대한 첫 번째 일반 흐름 전송(요청 또는 응답)입니다.
세션이 다른 데이터 흐름 전에 바인딩되지 않은 경우
DLC 중단으로 인해 세션이 비정상적으로 종료되는 경우
DEALLOCATE 동사에는 콜백 함수가 호출될 때 매개 변수 중 하나로 반환되는 상관 관계 필드 멤버도 포함됩니다. 애플리케이션은 어떤 방식으로든 이 매개 변수를 사용할 수 있습니다(예: 애플리케이션 내의 제어 블록에 대한 포인터).
TP는 콜백 함수에 전달된 형식 매개 변수를 사용하여 메시지 흐름이 묵시적 삭제가 수신되었음을 나타내는지 여부를 확인할 수 있습니다.
콜백 루틴이 호출되기 전에 DEALLOCATE 동사가 완료될 수 있습니다. 대화는 RESET 상태인 것으로 간주되며 대화 식별자를 사용하여 더 이상 동사를 실행할 수 없습니다. 애플리케이션이 세션의 다음 데이터 흐름 전에 TP_ENDED 동사를 발급하는 경우 콜백 루틴이 호출되지 않습니다.
Host Integration Server를 사용하면 TP가 데이터를 보낸 직후에 SEND_DATA 형식 매개 변수를 AP_SEND_DATA_DEALLOC_ *로 지정하여 대화를 할당 취소할 수 있습니다. 그러나 SEND_DATA 동사에는 암시적 무시 콜백 함수가 포함되어 있지 않습니다. 묵시적 잊어버리기 알림을 수신하려는 TP는 DEALLOCATE 를 명시적으로 발급해야 합니다.