RECEIVE_AND_POST

RECEIVE_AND_POST谓词异步接收应用程序数据和状态信息。 这样,本地事务程序(TP)就可以继续处理,而数据仍在到达本地逻辑单元(LU)。

虽然异步 RECEIVE_AND_POST 未完成,但可以在同一会话上发出以下谓词:

  • DEALLOCATE (AP_ABEND_PROG、AP_ABEND_SVC或AP_ABEND_TIMER)

  • GET_ATTRIBUTES

  • GET_TYPE

  • REQUEST_TO_SEND

  • SEND_ERROR

  • TEST_RTS

  • TP_ENDED

    这样,应用程序就可以使用异步 RECEIVE_AND_POST 来接收数据。 虽然 RECEIVE_AND_POST 未完成,但它仍然可以使用 SEND_ERRORREQUEST_TO_SEND。 建议将此功能用于完全异步支持。 有关 TP 如何接收数据以及如何使用此谓词的信息,请参阅本主题中的“备注”。

    以下结构描述了 RECEIVE_AND_POST 谓词使用的谓词控制块(VCB)。

语法

  
struct receive_and_post {  
    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 short      what_rcvd;  
    unsigned char       rtn_status;  
    unsigned char       fill;  
    unsigned char       rts_rcvd;  
    unsigned char       reserv4;  
    unsigned short      max_len;  
    unsigned short      dlen;  
    unsigned char FAR * dptr;  
    unsigned char FAR * sema;  
    unsigned char       reserv5;  
};   

成员

opcode
提供的参数。 指定谓词作代码,AP_B_RECEIVE_AND_POST。

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 返回。

what_rcvd
返回的参数。 指示是否收到数据或聊天状态。 “成员”部分下面列出了可能的值

rtn_status
提供的参数。 指示是否应在一个 API 调用中返回数据和聊天状态指示器。

  • AP_NO指定应在动词的单独调用中单独返回指示器。

  • AP_YES指定应同时返回指示器,前提是两者都可用。 两者都可以在以下情况下返回:

    接收缓冲区足够大,足以容纳状态指示器之前的所有数据。

    填充参数指定 BUFFER 或 LL,数据是状态指示器之前的最后一条逻辑记录。

    填补
    提供的参数。 指定本地 TP 接收数据的方式。

    使用AP_BUFFER指示本地 TP 接收数据,直到达到 max_len 指定的字节数或数据结束为止。 无论逻辑记录格式如何,都会收到数据。

    使用AP_LL指示以逻辑记录格式接收数据。 接收的数据可以是:

  • 完整的逻辑记录。

  • 逻辑记录的 max_len 字节部分。

  • 逻辑记录的末尾

    rts_rcvd
    返回的参数。 指示合作伙伴 TP 是否 REQUEST_TO_SEND颁发。 可能的值为:

  • AP_YES指示合作伙伴 TP 发出 REQUEST_TO_SEND,请求本地 TP 将会话更改为 RECEIVE 状态。

  • AP_NO表示合作伙伴 TP 尚未发出 REQUEST_TO_SEND

    max_len
    提供的参数。 指定本地 TP 可以接收的最大数据字节数。 范围为 0 到 65535。

    该值不能超过缓冲区的长度才能包含接收的数据。 dptr 的偏移量加上max_len的值不能超过数据段的大小。

    Dlen
    返回的参数。 指定接收的数据字节数。 数据存储在 dptr 指定的缓冲区中。 长度为零表示未收到任何数据。

    dptr
    提供的参数。 提供缓冲区的地址,以包含本地 LU 接收的数据。

    对于 Microsoft® Windows®,数据缓冲区可以驻留在静态数据区域或全局分配区域中。 数据缓冲区必须完全适合此区域。

    sema
    提供的参数。 提供 APPC 在异步接收作完成时要清除的信号灯的地址。 sema 参数是通过调用 CreateEventOpenEvent Win32 函数获取的事件句柄。

    what_rcvd 参数返回的值

  • AP_CONFIRM_DEALLOCATE指示合作伙伴 TP 颁发了 DEALLOCATE,dealloc_type设置为AP_SYNC_LEVEL。ALLOCATE 建立的对话同步级别AP_CONFIRM_SYNC_LEVEL。 收到此值后,本地 TP 通常会 发出 CONFIRMED 问题。

  • AP_CONFIRM_SEND表示合作伙伴 TP 已PREPARE_TO_RECEIVEptr_type设置为AP_SYNC_LEVEL 。 由 ALLOCATE 建立的对话同步级别AP_CONFIRM_SYNC_LEVEL。 收到此值后,本地 TP 通常会发出 CONFIRMED,并开始发送数据。

  • AP_CONFIRM_WHAT_RECEIVED指示合作伙伴 TP 已发出 CONFIRM。 收到此值后,本地 TP 通常会 发出 CONFIRMED 问题。

  • AP_DATA指示如果填充设置为AP_BUFFER,RECEIVE_AND_POST可以返回此值。 本地 TP 接收了数据 ,直到达到max_len 或数据末尾。 有关详细信息,请参阅本主题中的“备注”。

  • AP_DATA_COMPLETE指示,对于 RECEIVE_AND_POST,本地 TP 已收到完整的数据记录或数据记录的最后一部分。

    对于填充设置为AP_LLRECEIVE_AND_POST,此值指示本地 TP 已收到完整的逻辑记录或逻辑记录的末尾。

    收到此值后,本地 TP 通常会重新发出 RECEIVE_AND_POST 或发出另一个接收谓词。 如果合作伙伴 TP 发送了更多数据,则本地 TP 开始接收新的数据单元。

    否则,本地 TP 将检查状态信息。

    如果 primary_rc 包含AP_OK, 并且what_rcvd 包含AP_SEND、AP_CONFIRM_SEND、AP_CONFIRM_DEALLOCATE或AP_CONFIRM_WHAT_RECEIVED,请参阅本地 TP 通常执行的下一作的值(在本部分中)的说明。

    如果 primary_rc 包含AP_DEALLOC_NORMAL,则已解除分配会话,以响应合作伙伴 TP 颁发的 DEALLOCATE

  • AP_DATA_INCOMPLETE指示 ,对于RECEIVE_AND_POST,本地 TP 已收到不完整的数据记录。 max_len参数指定的值小于数据记录的长度(如果这不是读取记录的第一个接收谓词,则小于数据记录的其余部分)。

    对于填充设置为AP_LLRECEIVE_AND_POST,此值指示本地 TP 已收到不完整的逻辑记录。

    收到此值后,本地 TP 通常会重新发出 RECEIVE_AND_POST (或发出另一个接收谓词)来接收记录的下一部分。

  • AP_NONE指示 TP 未接收数据或聊天状态指示器。

  • AP_SEND表示,对于合作伙伴 TP,会话已进入 RECEIVE 状态。 对于本地 TP,会话现在处于 SEND 状态。 收到此值后,本地 TP 通常使用 SEND_DATA 开始发送数据。

返回代码

AP_OK
主要返回代码;已成功执行谓词。

AP_YES rtn_status时,可以返回上述返回代码或以下返回代码之一。

AP_DATA_COMPLETE_SEND
主要返回代码;这是AP_DATA_COMPLETE和AP_SEND的组合。

AP_DATA_COMPLETE_CONFIRM_SEND
主要返回代码;这是AP_DATA_COMPLETE和AP_CONFIRM_SEND的组合。

AP_DATA_COMPLETE_CONFIRM
主要返回代码;这是AP_DATA_COMPLETE和AP_CONFIRM_WHAT_RECEIVED的组合。

AP_DATA_COMPLETE_CONFIRM_DEALL
主要返回代码;这是AP_DATA_COMPLETE和AP_CONFIRM_DEALLOCATE的组合。

AP_DATA_SEND
主要返回代码;这是AP_DATA和AP_SEND的组合。

AP_DATA_CONFIRM_SEND
主要返回代码;这是AP_DATA和AP_CONFIRM_SEND的组合。

AP_DATA_CONFIRM
主要返回代码;这是AP_DATA和AP_CONFIRM的组合。

AP_DATA_CONFIRM_DEALLOCATE
主要返回代码;这是AP_DATA和AP_CONFIRM_DEALLOCATE的组合。

AP_DEALLOC_NORMAL
主要返回代码;合作伙伴 TP 颁发 了 DEALLOCATE,dealloc_type 设置为 AP_FLUSH 或AP_SYNC_LEVEL,会话的同步级别指定为 AP_NONE。

如果 rtn_status AP_YES,另请检查 what_rcvd

AP_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。

AP_BAD_CONV_ID

辅助返回代码; conv_id 的值与 APPC 分配的会话标识符不匹配。

AP_BAD_TP_ID

辅助返回代码; tp_id 的值与 APPC 分配的 TP 标识符不匹配。

AP_BAD_RETURN_STATUS_WITH_DATA

辅助返回代码;APPC 无法识别指定的 rtn_status 值。

AP_INVALID_DATA_SEGMENT

辅助返回代码;为数据缓冲区指定的长度比分配给包含缓冲区的段长。

AP_INVALID_SEMAPHORE_HANDLE

辅助返回代码;RAM 信号灯或系统信号灯句柄的地址无效。

APPC 无法捕获所有无效信号灯句柄。 如果 TP 通过错误的 RAM 信号灯句柄,则会导致保护冲突。

AP_RCV_AND_POST_BAD_FILL

辅助返回代码; 填充 参数设置为无效值。

AP_STATE_CHECK
主要返回代码;该谓词未执行,因为它以无效状态发出。

AP_RCV_AND_POST_BAD_STATE

辅助返回代码;当 TP 发出此谓词时,会话未处于 RECEIVE 或 SEND 状态。

AP_RCV_AND_POST_NOT_LL_BDY

辅助返回代码;会话处于 SEND 状态;TP 开始但未完成发送逻辑记录。

AP_CANCELED
主要返回代码;本地 TP 发出了以下谓词之一,该谓词取消 了RECEIVE_AND_POST

dealloc_type设置为AP_ABEND_PROG、AP_ABEND_SVC或AP_ABEND_TIMER的 DEALLOCATE

SEND_ERROR

TP_ENDED

发出其中一个谓词会导致清除信号灯。

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

    辅助返回代码;至少有一个节点已启动,但未在任何活动节点上配置本地 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_NO_TRUNC
    主要返回代码;在会话处于 SEND 状态时,合作伙伴 TP 颁发SEND_ERROR,err_type设置为AP_PROG。 数据未截断。

    AP_PROG_ERROR_PURGING
    主要返回代码;在 RECEIVE、PENDING、PENDING_POST、CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE 状态中,合作伙伴 TP 发出SEND_ERROR,err_type设置为AP_PROG。 已清除发送但尚未收到的数据。

    AP_PROG_ERROR_TRUNC
    主要返回代码;在 SEND 状态中,发送不完整的逻辑记录后,合作伙伴 TP 发出SEND_ERROR,err_type设置为AP_PROG。 本地 TP 可能已通过接收谓词接收逻辑记录的第一部分。

    AP_STACK_TOO_SMALL
    主要返回代码;应用程序的堆栈大小太小,无法执行谓词。 增加应用程序的堆栈大小。

    AP_CONV_BUSY
    主要返回代码;在任何对话中,一次只能有一个未完成的对话谓词。 如果本地 TP 有多个线程,并且多个线程使用相同的 conv_id发出 APPC 调用,则可能会出现这种情况。

    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_NO_TRUNC
    主要返回代码;处于 SEND 状态时,合作伙伴 TP(或合作伙伴 LU)发布了SEND_ERROR,err_type设置为AP_SVC。 数据未截断。

    AP_SVC_ERROR_PURGING
    主要返回代码;合作伙伴 TP(或合作伙伴 LU) SEND_ERROR 在 RECEIVE、PENDING_POST、CONFIRM、CONFIRM_SEND 或CONFIRM_DEALLOCATE状态中将 err_type设置为AP_SVC 。 发送到合作伙伴 TP 的数据可能已被清除。

    AP_SVC_ERROR_TRUNC
    主要返回代码;在 SEND 状态中,发送不完整的逻辑记录后,合作伙伴 TP(或合作伙伴 LU) 发出了SEND_ERROR。 本地 TP 可能已收到逻辑记录的第一部分。

注解

本地 TP 通过以下过程接收数据:

  1. 本地 TP 发出接收谓词,直到它完成接收完整的数据单元。 接收的数据可以是:

    • 一条逻辑记录。

    • 接收的数据缓冲区与其逻辑记录格式无关。

      为了接收完整的数据单元,本地 TP 可能需要多次发出接收谓词。 收到完整的数据单元后,本地 TP 可以对其进行作。 接收谓词是 RECEIVE_AND_POSTRECEIVE_AND_WAITRECEIVE_IMMEDIATE

  2. 本地 TP 再次发出接收谓词。 这具有以下效果之一:

    • 如果合作伙伴 TP 发送了更多数据,则本地 TP 开始接收新的数据单元。

    • 如果合作伙伴 TP 已完成发送数据或正在等待确认,则状态信息(通过 what_rcvd提供)表示本地 TP 通常执行的下一个作。

    以下过程显示了使用 RECEIVE_AND_POST 的本地 TP 执行的任务。

使用RECEIVE_AND_POST

  1. 对于 Microsoft Windows®作系统,TP 通过调用 RegisterWindowMessage API 或分配信号灯来检索 WinAsyncAPPC 消息编号。 如果应用程序希望通过 Windows 消息机制收到通知,则 sema 字段应设置为 NULL。

    APPC 会在本地 TP 完成接收数据时发送 Windows 消息或清除信号灯。

    本地 TP 异步接收数据时,信号灯将保持设置。 当本地 TP 完成接收数据时,APPC 将清除信号灯。

  2. TP 问题 RECEIVE_AND_POST

  3. TP 检查 primary_rc的值。

    如果 primary_rc AP_OK,接收缓冲区( dptr 指向)正在异步接收来自合作伙伴 TP 的数据。 异步接收数据时,本地 TP 可以:

    • 执行与此对话无关的任务。

    • 问题 REQUEST_TO_SEND

    • 通过发出 GET_TYPEGET_ATTRIBUTESTEST_RTS来收集有关此对话的信息。

    • 通过颁发设置为 dealloc_type AP_ABEND_PROG、AP_ABEND_SVC或AP_ABEND_TIMER的 DEALLOCATE,提前取消RECEIVE_AND_POST;SEND_ERROR;或TP_ENDED

      但是,如果未 AP_OK primary_rc则RECEIVE_AND_POST 失败。 在这种情况下,本地 TP 不会执行接下来的两个任务。

  4. 对于 Windows作系统,当 TP 异步接收数据时,APPC 会发出 WinAsyncAPPC Windows 消息或清除信号灯。

  5. TP 检查 primary_rc的新值。

    如果 primary_rc AP_OK,则本地 TP 可以检查其他返回的参数并作异步接收的数据。

    如果未 AP_OK primary_rc ,则仅 secondary_rcrts_rcvd (接收的请求)有意义。

    对话状态效果

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

    当会话处于 SEND 状态时发出 RECEIVE_AND_POST 具有以下效果:

  • 本地 LU 将发送缓冲区中的信息和 SEND 指示器发送到合作伙伴 TP。

  • 会话更改为PENDING_POST状态;本地 TP 已准备好异步接收来自合作伙伴 TP 的信息。

    聊天更改状态两次:

  • 初始返回谓词后,如果 primary_rc 包含AP_OK,则会话将更改为PENDING_POST状态。

  • 完成谓词后,状态会根据以下值而更改:

    primary_rc 参数

    如果primary_rc AP_OK,则为what_rcvd参数

    下表显示了与 primary_rcAP_OK时what_rcvd 的每个值关联的新状态。

what_rcvd 新状态
AP_CONFIRM_DEALLOCATE CONFIRM_DEALLOCATE
AP_DATA_COMPLETE_CONFIRM_DEALL CONFIRM_DEALLOCATE
AP_DATA_CONFIRM_DEALLOCATE CONFIRM_DEALLOCATE
AP_CONFIRM_SEND CONFIRM_SEND
AP_DATA_COMPLETE_CONFIRM_SEND CONFIRM_SEND
AP_DATA_CONFIRM_SEND CONFIRM_SEND
AP_CONFIRM_WHAT_RECEIVED 确认
AP_DATA_COMPLETE_CONFIRM 确认
AP_DATA_CONFIRM 确认
AP_DATA 收到
AP_DATA_COMPLETE 收到
AP_DATA_INCOMPLETE 收到
AP_SEND 发送
AP_DATA_COMPLETE_SEND SEND_PENDING

下表显示了与 除AP_OK以外的每个primary_rc 值关联的新状态。

primary_rc 新状态
AP_CANCELED 无更改
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_DEALLOC_NORMAL 重置
AP_PROG_ERROR_PURGING 收到
AP_PROG_ERROR_NO_TRUNC 收到
AP_SVC_ERROR_PURGING 收到
AP_SVC_ERROR_NO_TRUNC 收到
AP_PROG_ERROR_TRUNC 收到
AP_SVC_ERROR_TRUNC 收到

基本对话的数据结束

如果本地 TP 问题 RECEIVE_AND_POST 并将 填充 设置为AP_BUFFER,则到达 max_len 或数据末尾时,数据接收将结束。 数据末尾由除AP_OK(例如AP_DEALLOC_NORMAL)以外的值primary_rc指示,或者what_rcvd具有以下值之一:

AP_SEND

AP_CONFIRM_SEND

AP_CONFIRM_DEALLOCATE

AP_CONFIRM_WHAT_RECEIVED

AP_DATA_CONFIRM_SEND

AP_DATA_CONFIRM_DEALLOCATE

AP_DATA_CONFIRM

若要确定数据末尾是否已到达,本地 TP 将重新发出 RECEIVE_AND_POST。 如果新 primary_rc 包含AP_OK且 what_rcvd 包含AP_DATA,则尚未达到数据的末尾。 但是,如果已达到数据的末尾, primary_rcwhat_rcvd 将指示数据结束的原因。

故障排除

如果发生以下情况之一,本地 TP 可以无限期等待:

  • 对于 Windows作系统,本地 TP 发出 RECEIVE_AND_POST 请求,但合作伙伴 TP 未发送数据或初始 primary_rc 未AP_OK。

  • 对于 OS/2作系统,本地 TP 发出 DosSemWait 函数调用,但合作伙伴 TP 未发送数据或初始 primary_rc 未AP_OK。

    这是因为 APPC 不会发出 Windows 消息或清除信号灯。

    当出现以下 primary_rc 参数之一的条件时,APPC 不会清除信号灯:

    AP_INVALID_SEMAPHORE_HANDLE

    AP_INVALID_VERB_SEGMENT

    AP_STACK_TOO_SMALL

    若要测试what_rcvd,请将max_len设置为零的问题RECEIVE_AND_POST,以便本地 TP 可以确定合作伙伴 TP 是否具有要发送、寻求确认或更改聊天状态的数据。