TLI 和 XTI 特征
TLI 和 XTI 是用于提供传输层服务的接口。
这些接口的语义与套接字的语义非常相似。 接口的一些特征是:
- 传输端点 -传输端点指定传输用户与特定传输提供程序之间的通信路径。 与 socket 子例程 (返回文件描述符 s) 类似,对 TLI 和 XTI t_open 子例程的调用返回文件描述符 fd作为要用于后续调用的句柄。
一个传输端点一次只能支持一个已建立的传输连接,但传输提供程序 (例如 TCP/IP) 为多个传输端点提供服务。 要激活和绑定本地传输端口,传输端点必须具有通过 t_bind 子例程调用与其关联的传输地址。 要在两个活动传输端点之间建立端到端连接,必须遵循 t_connect 子例程。 对于需要无连接服务的传输端点( User Datagram Protocol 如/ Internet Protocol (UDP/IP)),将跳过连接阶段,在调用t_bind 子程序后即可调用t_rcvudata 子程序。
- 传输端点的所有权 -从传输提供程序获取传输端点后 (通过从 t_open 调用获取文件描述符 fd) , fd 指定的句柄可由多个进程 (例如 fork 子例程) 共享。 但是,传输提供程序将共享相同 fd 的进程视为单个返回点。 这些进程必须协调其活动以不违反提供者的状态。
t_sync 子例程调用返回传输提供程序的状态,允许用户在执行进一步操作之前验证传输提供程序状态。 要管理多个传输提供程序 (例如服务器应用程序) 的应用程序必须为每个提供程序调用 t_open 子例程。 例如,正在等待来自多个传输提供程序 (例如 TCP/IP 和 OSI) 的入局连接指示的服务器应用程序必须打开多个 t_open 子例程,并侦听每个关联句柄 (fd) 上的连接指示。
- 同步和异步执行调用 -TLI 和 XTI 提供同步和异步执行调用。 在同步操作方式下,调用将阻塞,直到满足特定事件为止。 同步方式是缺省操作方式。 在异步操作方式 (设置了 O_NONBLOCK 标志的t_open 子例程) 中,将立即返回调用,并且 poll 和/或 select 系统调用将在稍后通知指定的事件。
建议用户根据其功能的性质选择一种执行方式。 例如,典型的服务器应用程序应该利用异步执行来促进客户机请求所需的多个并发操作。
- 事件管理 -对于面向连接的方式,用户必须了解当前连接的状态或对该状态发出的调用所导致的任何状态的更改。 TLI 和 XTI 事件管理允许通过返回码 (TLOOK) 或调用 (t_look 子例程) 来请求当前状态信息的事件状态。
下表列出了用户必须针对各种连接类型发出的典型调用序列。
注: 这些表作为典型序列的示例提供,而不是需要传输提供程序的准确顺序。
面向连接的调用:
| 服务器 | 客户机 |
|---|---|
| t_open () | t_open () |
| | | | |
| t_bind () | t_bind () |
| | | | |
| t_alloc () | t_alloc () |
| | | | |
| t_listen () | t_connect () |
| : | <—————————-: |
| : | : |
| t_accept () | : |
| | | : |
| t_rcv () /t_snd () | t_snd () /t_rcv () |
| | | | |
| t_snddis () /t_rcvdis () | t_rcvdis () /t_snddis () |
| | | | |
| t_unbind () | t_unbind () |
| | | | |
| t_close () | t_close () |
无连接调用:
| 服务器 | 客户机 |
|---|---|
| t_open () | t_open () |
| | | | |
| t_bind () | t_bind () |
| | | | |
| t_alloc () | t_alloc () |
| | | | |
| t_rcvudata () /t_sndudata | 发送数据/接收数据 |
| | | | |
| t_unbind () | t_unbind () |
| | | | |
| t_close () | t_close () |