SEND_ERROR
SEND_ERROR谓词通知合作伙伴事务程序 (TP) 本地 TP 遇到应用程序级错误。
以下结构描述了SEND_ERROR谓词使用的谓词控制块 (VCB ) 。
语法
struct send_error {
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 rts_rcvd;
unsigned char err_type;
unsigned char err_dir;
unsigned char reserv3;
unsigned short log_dlen;
unsigned char FAR * log_dptr;
};
成员
opcode
提供的参数。 指定谓词操作代码,AP_B_SEND_ERROR。
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 返回。
rts_rcvd
返回的参数。 指示合作伙伴 TP 是否 REQUEST_TO_SEND颁发。可能的值包括:
AP_YES指示合作伙伴 TP 已发出 REQUEST_TO_SEND,请求本地 TP 将会话更改为 RECEIVE 状态。 若要更改为 RECEIVE 状态,本地 TP 可以使用 PREPARE_TO_RECEIVE、 RECEIVE_AND_WAIT 或 RECEIVE_AND_POST。
AP_NO指示合作伙伴 TP 尚未发出 REQUEST_TO_SEND。
err_type
提供的参数。 指示所报告的错误类型-应用程序或服务程序。AP_PROG指示错误将报告给最终用户应用程序。 此值会导致 APPC 向合作伙伴 TP 发送以下返回代码之一:
AP_PROG_ERROR_NO_TRUNC
AP_PROG_ERROR_PURGING
AP_PROG_ERROR_TRUNC
AP_SVC指示错误将报告给服务程序。 此值会导致 APPC 向合作伙伴 TP 发送以下返回代码之一:
AP_SVC_ERROR_NO_TRUNC
AP_SVC_ERROR_PURGING
AP_SVC_ERROR_TRUNC
err_dir
提供的参数。 指示错误是刚接收的数据还是即将发送的数据。 仅当会话处于SEND_PENDING状态时,才使用此参数。 否则,将忽略 参数。 以下是允许的值:AP_RCV_DIR_ERROR指示 TP 在检测到与刚刚收到的数据关联的错误后发出 了SEND_ERROR 。
AP_SEND_DIR_ERROR指示 TP 在检测到与要发送的数据关联的错误后发出 SEND_ERROR 。 例如,TP 在从磁盘驱动器读取数据时遇到错误。
reserv3
一个保留字段。log_dlen
为基本对话提供的参数;指定要发送到错误日志文件的数据字节数。 范围为 0 到 32767。长度为零表示没有错误日志数据。
log_dptr
为基本对话提供的参数;指定包含错误信息的数据缓冲区的地址。 数据将发送到本地错误日志和伙伴逻辑单元 (LU) 。如果log_dlen大于零,SEND_ERROR将使用此参数。
对于 Microsoft Windows,数据缓冲区可以驻留在静态数据区域或全局分配的区域中。 数据缓冲区必须完全适合此区域。
TP 必须将错误数据格式化为 GDS 错误日志变量。 有关详细信息,请参阅 IBM SNA 手册 () 。
返回代码
AP_OK
主要返回代码;谓词已成功执行。
AP_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。
AP_BAD_CONV_ID
辅助返回代码; conv_id 的值与 APPC 分配的会话标识符不匹配。
AP_BAD_TP_ID
辅助返回代码; tp_id 的值与 APPC 分配的 TP 标识符不匹配。
AP_BAD_ERROR_DIRECTION
辅助返回代码;APPC 无法识别指定的 err_dir 。
AP_INVALID_DATA_SEGMENT
辅助返回代码;日志文件的错误数据比为包含错误数据而分配的段长,或者错误数据缓冲区的地址不正确。
AP_SEND_ERROR_BAD_TYPE
辅助返回代码; err_type 的值无效。
AP_SEND_ERROR_LOG_LL_WRONG
辅助返回代码;错误日志 GDS 变量的 LL 字段与数据的实际长度不匹配。
以任何允许的状态发出 SEND_ERROR 时,可以生成以下返回代码:
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
辅助返回代码;至少已启动一个节点,但发出 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_STACK_TOO_SMALL
主要返回代码;应用程序的堆栈大小太小,无法执行谓词。 增加应用程序的堆栈大小。AP_CONV_BUSY
主返回代码;任何对话一次只能有一个未完成的对话谓词。 如果本地 TP 有多个线程,并且多个线程使用相同的 conv_id发出 APPC 调用,则可能会出现这种情况。AP_THREAD_BLOCKING
主要返回代码;调用线程已在某个阻塞调用中。AP_UNEXPECTED_DOS_ERROR
主要返回代码;操作系统在处理来自本地 TP 的 APPC 调用时向 APPC 返回了错误。 已通过 secondary_rc 返回了操作系统返回代码。 此返回代码是以 Intel 字节交换顺序显示的。 如果问题持续出现,请咨询系统管理员。仅当 发出SEND_ERROR 处于 SEND 状态时,才能生成以下返回代码:
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_PROG_ERROR_PURGING
主返回代码;在 RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态下,合作伙伴 TP 颁发SEND_ERROR,err_type设置为 AP_PROG。 已发送但尚未接收的数据将被清除。仅当 发出SEND_ERROR 处于 SEND 状态时,才能生成以下返回代码:
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
主返回代码;在 RECEIVE、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态时, err_type设置为AP_SVC 的合作伙伴 TP (或合作伙伴 LU) 颁发SEND_ERROR。 发送到伙伴 TP 的数据可能已被清除。仅当 SEND_ERROR 处于 RECEIVE 状态时,才能生成以下返回代码:
AP_DEALLOC_NORMAL
主返回代码;此返回代码不指示错误。合作伙伴 TP 发布了 DEALLOCATE,dealloc_type设置为以下其中一项:
AP_FLUSH
使用指定为 AP_NONE 的会话的同步级别AP_SYNC_LEVEL
注解
当 TP 发出此谓词时,会话可以处于除 RESET 之外的任何状态。 如果使用err_dir,则必须 SEND_PENDING 会话状态。
本地 TP 立即将错误通知发送到合作伙伴 TP;它不在本地 LU 的发送缓冲区中保存信息。
成功执行此谓词后,本地 TP 的会话将处于 SEND 状态,伙伴 TP 处于 RECEIVE 状态。
新状态由 primary_rc确定。 下表汇总了可能的状态更改。
primary_rc | 新状态 |
---|---|
AP_OK | SEND |
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_DEALLOC_NORMAL | RESET |
AP_PROG_ERROR_PURGING | RECEIVE |
AP_SVC_ERROR_PURGING | RECEIVE |
如果在 TP 发出 SEND_ERROR时会话处于 RECEIVE 状态,则 APPC 将清除传入的数据。 此数据包括:
SEND_DATA发送的数据。
返回代码指示器。
确认请求。
解除分配请求。
APPC 不会清除传入的发送请求指示器。 APPC 将清除的传入返回代码指示器替换为其他返回代码。 主返回代码AP_OK替换以下已清除的返回代码指示器:
AP_PROG_ERROR_NO_TRUNC
AP_PROG_ERROR_PURGING
AP_PROG_ERROR_TRUNC
AP_SVC_ERROR_NO_TRUNC
AP_SVC_ERROR_PURGING
AP_SVC_ERROR_TRUNC
主返回代码AP_DEALLOC_NORMAL替换以下已清除的返回代码指示器:
AP_ALLOCATION_ERROR
AP_ALLOCATION_FAILURE_NO_RETRY
AP_ALLOCATION_FAILURE_RETRY
AP_CONVERSATION_TYPE_MISMATCH
AP_DEALLOC_ABEND
AP_DEALLOC_ABEND_PROG
AP_DEALLOC_ABEND_SVC
AP_DEALLOC_ABEND_TIMER
AP_PIP_NOT_ALLOWED
AP_PIP_NOT_SPECIFIED_CORRECTLY
AP_SECURITY_NOT_VALID
AP_SYNC_LEVEL_NOT_SUPPORTED
AP_TP_NAME_NOT_RECOGNIZED
AP_TRANS_PGM_NOT_AVAIL_NO_RETRY
AP_TRANS_PGM_NOT_AVAIL_RETRY
当会话处于SEND_PENDING状态时,APPC 根据 err_dir 中的值向合作伙伴 TP 报告以下返回代码:
AP_PROG_ERROR_PURGING
以 RECEIVE 作为err_dir颁发SEND_ERROR的本地 TP。AP_PROG_ERROR_NO_TRUNC
以 SEND 作为err_dir颁发SEND_ERROR的本地 TP。AP_SVC_ERROR_PURGING
本地 TP 颁发 SEND_ERROR RECEIVE 作为 err_dir。AP_SVC_ERROR_NO_TRUNC
以 SEND 作为err_dir颁发SEND_ERROR的本地 TP。