本章中介绍的接口具有多线程安全性。这意味着可以在多线程应用程序中随意使用包含 XTI/TLI 接口调用的应用程序。由于这些接口调用不可重复执行,因此它们不提供线性可伸缩性。
在异步环境中,XTI/TLI 接口行为尚未有明确的规定。请不要从信号处理程序例程使用这些接口。
TLI 是随 AT&T System V Release 3 在 1986 年引入的。TLI 当时提供一个传输层接口 API。ISO 传输服务定义提供了 TLI 所基于的模型。现在,TLI 提供了 OSI 传输层和会话层之间的 API。TLI 接口在 UNIX 的 AT&T System V Release 4 版本中得到了进一步发展,并在 SunOS 5.6 操作系统接口中可用。
XTI 接口由 TLI 接口演变而来,代表该系列接口的未来方向。使用 XTI 与使用 TLI 接口的应用程序相兼容,因此无需立即将TLI 应用程序移植到XTI。新应用程序可以使用 XTI 接口,而且可以在必要时将较旧的应用程序移植到 XTI。
TLI 实现为应用程序链接到的库 (libnsl) 中的一组接口调用。XTI 应用程序是使用 c89 前端编译的,并且必须与 xnet 库 (libxnet) 链接。有关使用 XTI 进行编译的其他信息,请参见 standards(5) 手册页。
使用 XTI 接口的应用程序使用 xti.h 头文件,而使用 TLI 接口的应用程序包含 tiuser.h 头文件。
与第 4 章中介绍的某些其他接口和机制一起使用时,XTI/TLI 代码可以独立于当前的传输提供器。SunOS 5 产品将某些传输提供器(例如,TCP)作为基本操作系统的一部分。传输提供器执行服务,而传输用户请求服务。传输用户向传输提供器发出服务请求,例如,通过 TCP 和 UDP 连接传送数据的请求。
通过利用以下两个组件,XTI/TLI 还可以用于独立于传输的编程:
执行传输服务(特别是传输选择和名称到地址的转换)的库例程。网络服务库包括一组针对用户进程实现 XTI/TLI 的接口。请参见第 9 章,传输选择和名称到地址的映射。
使用 TLI 的程序应该通过在编译时指定 -l nsl 选项与 libnsl 网络服务库链接。
使用 XTI 的程序应该通过在编译时指定 -l xnet 选项与 xnet 库链接。
定义传输例程调用顺序的状态转换规则。有关状态转换规则的更多信息,请参见状态转换。状态表基于事件的状态和处理方式来定义库调用的合法序列。这些事件包括用户生成的库调用,以及提供器生成的事件指示。XTI/TLI 程序员在使用接口之前应了解所有状态转换。