RSiOpen 或 RSiOpenx 子例程

用途

初始化远程主机的 RSI 接口。

RSI 库 (libSpmi.a)

语法

#include sys/Rsi.h
int RSiOpen (rhandle, wait, bufsize, hostID, feed_callb,
            resy_callb, excp_callb)
RSiHandle rhandle;
int wait;
int bufsize;
char *hostID;
int (*feed_callb)();
int (*resy_callb)();
int (*excp_callb)();
int RSiOpenx (rhandlex, wait, bufsize, hostID, feed_callb,
            resy_callb, excp_callb)
RSiHandle rhandlex;
int wait;
int bufsize;
char *hostID;
int (*feed_callb)();
int (*resy_callb)();
int (*excp_callb)();

描述

RSiOpenRSiOpenx 子例程执行以下操作:

  1. 将发出数据使用者程序建立为特定主机上的 Xmservd 守护程序已知的数据使用者。 子例程通过向主机发送 are_you_hare 包来执行此操作。
  2. 初始化一个 RSI 句柄以供数据使用者程序后续使用。

该子程序是AIX®性能工具箱许可产品的一部分。

参数

子例程的参数为:

处理
必须指向RSiHandleStruct数组中的一个元素,该元素由之前的RSiInit调用返回。 如果子例程成功,那么该结构已初始化并准备用作后续 RSI 接口子例程调用的句柄。
汉德莱克斯
必须指向 RSiHandlex 句柄的元素,该句柄先前由 RSiOpenx 子例程初始化。
WAIT
使用请求/响应函数时,必须指定 RSi 接口等待响应的超时 (以毫秒计)。 在 LAN 上,此参数的合理值为 100 毫秒。 如果在指定的等待时间之后未接收到响应,那么库子例程将重试接收操作,直到等待时间经过 5 倍之后才返回超时指示。 等待时间必须为零或更多毫秒。
布夫斯姆
指定要用于构造网络信息包的最大缓冲区大小。 此大小必须至少为 4,096 个字节。 缓冲区大小确定程序可以接收的最大包长度,并设置在一个 数据订阅源 包中可以接收的数据值的数量限制。 将缓冲区大小设置为大于 Xmservd 守护程序的缓冲区大小是没有意义的,因为这两个守护程序都必须能够处理包。 如果您需要大量值,那么可以使用 Xmservd 的命令行参数 -b 来将其缓冲区大小增加到 16,384 字节。
数据订阅源 包的固定部分为 104 个字节,每个值占用 32 个字节。 缓冲区大小为 4,096 字节,每个包最多允许 124 个值。
hostID
必须是一个字符数组,其中包含其 Xmservd 守护程序是您要与之交谈的远程主机的标识。 主机标识的前一个字符 (最多为第一个空格) 将用作主机名。 完整主机标识存储在 RSiHandle 字段 longname 中,并且可能包含有助于用户识别所使用主机的任何描述。 主机名可以采用长格式 (包括域名) ,也可以采用短格式。
数据装入调用
必须是一个指向函数的指针,该函数在从 Xmservd 守护程序接收到 数据订阅源 个包时处理这些包。 调用此回调函数时,将向其传递三个参数,如以下信息中所述。
resy_callb
必须是一个指向函数的指针,该函数在从 Xmservd 守护程序接收到 i_am_back 个包时处理这些包。 调用此回调函数时,将向其传递三个参数,如以下信息中所述。
excp_callb
必须为 NULL 或指向函数的指针,该函数在从 Xmservd 守护程序接收到 except_rec 包时处理这些包。 如果传递了 NULL 指针,那么应用程序不会接收到 except_rec 消息。 调用此回调函数时,将向其传递三个参数,如以下信息中所述。 此自变量始终覆盖任何先前 RSiInvite 或 RSiInvitex 子例程, RSiOpen 或 RSiOpenx 子例程调用的相应自变量,并且自身可被后续执行的任一子例程所覆盖。 通过这种方式,您的应用程序可以开启和关闭异常监视。 对于 RSiOpen 或 RSiOpenx 调用,要覆盖由先前打开的调用指定的异常处理,必须首先使用 RSiClose 或 RSiClosex 子例程调用来关闭连接。
数据装入调用resy_callbexcp_callb 函数将使用以下参数进行调用:
  • RSiHandle 或 RSiHandlex -当接收到 data_feed 包时,保证指向的结构表示发送该包的主机。 在所有其他情况下, RSiHandle 或 RSiHandlex 结构可能表示应用程序正在与之通信的任何主机。

类型为 包 * 的指针,指向包含接收到的包的输入缓冲区。 在回调函数中,始终使用此指针而不是 RSiHandle 或 RSiHandlex 结构中的指针。

类型为 struct sockaddr_in *struct sockadd_in 6 * 的指针,指向源主机的 IP 地址。

返回值

如果成功,子例程将返回零并初始化类型为 RSiHandle 或 RSiHandlex 的数组元素,这些元素由 rhandle 或 rhandlex指向。 如果发生错误,那么会将错误文本放在外部字符数组 RSiEMsg 中,并且子例程会返回负值。

错误代码

所有远程统计信息接口 (RSI) 子例程都使用外部变量来提供错误信息。 为了访问这些变量,应用程序必须定义下列外部变量:

  • extern charRSiEMsg[];
  • extern intRSiErrno;

如果子例程未返回错误,那么 RSiErrno 变量将设置为 RSiOkay ,并且 RSiEMsg 字符数组为空。 如果检测到错误,RSiErrno变量将根据枚举RSiErrorType定义返回一个错误代码。

文件

描述
/usr/include/sys/Rsi.h 声明应用程序可以用来访问 RSI 的子例程,数据结构,句柄以及宏。