网络编程接口

网络编程接口(NPI)定义可以相互附加的网络模块之间的接口。 注册为特定 NPI 客户端的 客户端模块 只能附加到注册为同一 NPI 提供程序的提供程序 模块 。 同样,注册为特定 NPI 提供程序的提供程序模块只能附加到注册为同一 NPI 客户端的客户端模块。

每个 NPI 定义以下项:

  • 唯一标识 NPI 的 NPI 标识符。 网络模块指定 NPI 标识符,以指示当网络模块向网络模块注册器注册自身时支持的特定 NPI (NMR) 。 网络模块可以通过多次向 NMR 注册自身来支持多个 NPI,并针对它支持的每个 NPI 注册一次。 只有当客户端模块都支持同一 NPI 时,NMR 才会启动将客户端模块附加到提供程序模块。

  • 一个可选的 客户端特征 结构,用于指定每个客户端模块的 NPI 特定特征。 此类 NPI 特定特征可能包括客户端模块支持的 NPI) 版本 (或版本,或者客户端模块所需的地址系列或协议等项。 提供程序模块可以使用客户端模块的客户端特征结构中包含的信息来确定它是否会附加到客户端模块。 如果 NPI 未定义任何 NPI 特定的客户端特征,则不需要此结构。

  • 一个可选的 提供程序特征 结构,用于指定每个提供程序模块的 NPI 特定特征。 此类 NPI 特定特征可能包括提供程序模块支持的 NPI (版本或) 版本,或者提供程序模块支持的地址系列或协议等项。 客户端模块可以使用提供程序模块的客户端特征结构中包含的信息来确定它是否会附加到提供程序模块。 如果 NPI 未定义任何 NPI 特定的提供程序特征,则不需要此结构。

  • 零个或多个客户端模块回调函数。 提供程序模块成功附加到客户端模块后,提供程序模块可以通过调用客户端模块的回调函数来访问客户端模块的功能。

  • 一个或多个提供程序模块函数。 客户端模块成功附加到提供程序模块后,客户端模块可以通过调用提供程序模块的函数来访问提供程序模块的功能。

  • 包含指向每个客户端模块回调函数的函数指针的客户端 调度表 结构。 如果 NPI 未定义任何客户端模块回调函数,则不需要此结构。

  • 提供程序调度表结构,其中包含指向每个提供程序模块函数的函数指针。

支持特定 NPI 的客户端模块使用 NPI 定义的项来实现接口的客户端。 同样,支持特定 NPI 的提供程序模块使用 NPI 定义的项来实现接口的提供程序端。

NPI 定义的所有项对 NMR 不透明,NPI 标识符除外。 NMR 使用 NPI 标识符来确定应将哪些客户端模块附加到哪些提供程序模块。