PREPARE_TO_RECEIVE

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 将本地逻辑单元的 (LU 的内容发送,) 将缓冲区发送到伙伴 LU (和 TP) ,然后再将会话状态更改为 RECEIVE。

AP_SYNC_LEVEL值使用 由 ALLOCATE) 建立 (会话的同步级别来确定如何执行状态更改。

如果会话的同步级别AP_NONE,则 APPC 会将本地 LU 的发送缓冲区的内容发送到合作伙伴 TP,然后将会话的状态更改为 RECEIVE。 如果同步级别AP_CONFIRM_SYNC_LEVEL,APPC 会将本地 LU 的发送缓冲区的内容和确认请求发送到合作伙伴 TP。 收到来自合作伙伴 TP 的确认后,APPC 会将会话的状态更改为 RECEIVE。 但是,如果合作伙伴 TP 报告错误,则状态将更改为 RECEIVE 或 RESET。 请参阅本主题中的“备注”。

locks
提供的参数。 指定 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_aliasmode_name 少于 8 个字符,则必须确保用右侧空格填充这些字段。 如果这些参数未用空格填充,则返回此错误,因为没有可用于满足 ALLOCATE 请求的节点。

    ALLOCATE 为配置了多个节点的 Host Integration Server 客户端系统生成此返回代码时,有两个辅助返回代码,如下所示:

    0xF0000001

    辅助返回代码;尚未启动任何节点。

    0xF0000002

    辅助返回代码;至少已启动一个节点,但发出 TP_STARTED 时本地 LU () 未在任何活动节点上配置。 问题可能出在以下任一方面:

  • 未启动具有本地 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 (或合作伙伴 LU) 在 RECEIVE 、PENDING_POST 、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态时发出SEND_ERROR谓词, err_type设置为AP_SVC 。 发送到伙伴 TP 的数据可能已被清除。

注解

在更改会话状态之前,此谓词将执行以下操作之一的等效项:

  • FLUSH,方法是将本地 LU 的发送缓冲区的内容发送到伙伴 LU (和 TP) 。

  • 确认,方法是将本地 LU 的发送缓冲区的内容和确认请求发送到合作伙伴 TP。

    成功执行此谓词后,本地 TP 可以接收数据。

    当 TP 发出此谓词时,会话必须处于 SEND 状态。

    下表中汇总的状态更改基于 primary_rc 的值。

primary_rc 新状态
AP_OK RECEIVE
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

在合作伙伴 TP 通过后续接收谓词的 what_rcvd 参数收到以下值之一之前,会话不会更改为合作伙伴 TP 的 SEND 状态: