PREPARE_TO_RECEIVE谓词将本地事务程序(TP)会话的状态从 SEND 更改为 RECEIVE。
以下结构描述了 PREPARE_TO_RECEIVE 谓词使用的谓词控制块(VCB)。
语法
struct prepare_to_receive {
unsigned short opcode;
unsigned char opext;
unsigned char primary_rc;
unsigned short reserv2;
unsigned long secondary_rc;
unsigned char tp_id[8];
unsigned long conv_id;
unsigned char ptr_type;
unsigned char locks;
};
成员
opcode
提供的参数。 指定谓词作代码,AP_B_PREPARE_TO_RECEIVE。
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 返回。
ptr_type
提供的参数。 指定如何执行状态更改。
使用AP_FLUSH将聊天状态更改为 RECEIVE 之前,将本地逻辑单元 (LU) 发送缓冲区的内容发送到合作伙伴 LU (和 TP)。
AP_SYNC_LEVEL值使用会话的同步级别(由 ALLOCATE 建立)来确定如何执行状态更改。
如果会话的同步级别AP_NONE,APPC 会将本地 LU 发送缓冲区的内容发送到合作伙伴 TP,然后再将会话的状态更改为 RECEIVE。 如果同步级别AP_CONFIRM_SYNC_LEVEL,APPC 会将本地 LU 发送缓冲区的内容和确认请求发送到合作伙伴 TP。 从合作伙伴 TP 收到确认后,APPC 会将聊天状态更改为 RECEIVE。 但是,如果合作伙伴 TP 报告错误,状态将更改为 RECEIVE 或 RESET。 请参阅本主题中的“备注”。
锁
提供的参数。 指定 APPC 何时应将控制权返回到本地 TP。
仅当 ptr_type 设置为AP_SYNC_LEVEL且由 ALLOCATE 建立的对话同步级别AP_CONFIRM_SYNC_LEVEL时,才使用此参数。 (否则,将忽略参数。
使用AP_LONG指示当合作伙伴 TP 的确认和后续数据到达本地 LU 时,APPC 将控制权返回到本地 TP。 (此方法可以更有效地使用网络,但需要更长的时间才能将控制权返回到本地 TP。
使用AP_SHORT指示当合作伙伴 TP 的确认到达本地 LU 时,APPC 将控制权返回到本地 TP。
返回代码
AP_OK
主要返回代码;已成功执行谓词。
AP_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。
AP_BAD_CONV_ID
辅助返回代码; conv_id 的值与 APPC 分配的会话标识符不匹配。
AP_BAD_TP_ID
辅助返回代码; tp_id 的值与 APPC 分配的 TP 标识符不匹配。
AP_P_TO_R_INVALID_TYPE
辅助返回代码; ptr_type 参数未设置为有效值。
AP_STATE_CHECK
主要返回代码;该谓词未执行,因为它以无效状态发出。
AP_P_TO_R_NOT_SEND_STATE
辅助返回代码;会话未处于 SEND 状态。
AP_P_TO_R_NOT_LL_BDY
辅助返回代码;本地 TP 未完成发送逻辑记录。
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 为配置了多个节点的 Host Integration Server 客户端系统生成此返回代码时,有两个辅助返回代码,如下所示:
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_PURGING
主要返回代码;在 RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态中,合作伙伴 TP 发出SEND_ERROR,err_type设置为AP_PROG。 已清除发送但尚未收到的数据。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 发布了 DEALLOCATE,dealloc_type设置为AP_ABEND_PROG。
合作伙伴 TP 遇到 ABEND,导致合作伙伴 LU 发送 DEALLOCATE 请求。
AP_DEALLOC_ABEND_SVC
主要返回代码;会话已解除分配,因为合作伙伴 TP 发布了 DEALLOCATE,dealloc_type 设置为 AP_ABEND_SVC 。AP_DEALLOC_ABEND_TIMER
主要返回代码;会话已解除分配,因为合作伙伴 TP 发布了 DEALLOCATE,dealloc_type设置为AP_ABEND_TIMER。AP_SVC_ERROR_PURGING
主要返回代码;合作伙伴 TP(或 partner LU)在 RECEIVE、PENDING_POST、CONFIRM、CONFIRM_SEND 或CONFIRM_DEALLOCATE状态中,发出err_type设置为AP_SVC的SEND_ERROR谓词。 发送到合作伙伴 TP 的数据可能已被清除。
注解
在更改聊天状态之前,此谓词将执行以下任一作的等效项:
FLUSH,方法是将本地 LU 的发送缓冲区的内容发送到合作伙伴 LU(和 TP)。
确认,方法是将本地 LU 发送缓冲区的内容和确认请求发送到合作伙伴 TP。
成功执行此谓词后,本地 TP 可以接收数据。
当 TP 发出此谓词时,会话必须处于 SEND 状态。
下表汇总的状态更改基于 primary_rc的值。
primary_rc | 新状态 |
---|---|
AP_OK | 收到 |
AP_ALLOCATION_ERROR | 重置 |
AP_CONV_FAILURE_RETRY | 重置 |
AP_CONV_FAILURE_NO_RETRY | 重置 |
AP_DEALLOC_ABEND | 重置 |
AP_DEALLOC_ABEND_PROG | 重置 |
AP_DEALLOC_ABEND_SVC | 重置 |
AP_DEALLOC_ABEND_TIMER | 重置 |
AP_PROG_ERROR_PURGING | 收到 |
AP_SVC_ERROR_PURGING | 收到 |
在合作伙伴 TP 通过后续接收谓词 的 what_rcvd 参数接收以下值之一之前,会话不会更改为合作伙伴 TP 的 SEND 状态:
AP_SEND
使用 CONFIRMED AP_CONFIRM_SEND和答复
使用 CONFIRMED AP_DATA_COMPLETE_CONFIRM_SEND和答复
使用 CONFIRMED 进行AP_DATA_CONFIRM_SEND和答复
接收谓词是 RECEIVE_AND_POST、 RECEIVE_IMMEDIATE和 RECEIVE_AND_WAIT。