JavaScript is required to for searching.
跳过导航链接
退出打印视图
编程接口指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  内存和 CPU 管理

2.  用于 Solaris Cluster 的远程共享内存 API

3.  会话描述协议 API

4.  进程调度程序

5.  地址组 API

6.  输入/输出接口

7.  进程间通信

8.  套接字接口

9.  使用 XTI 和 TLI 编程

什么是 XTI 和 TLI?

XTI/TLI 读/写接口

写入数据

读取数据

关闭连接

高级 XTI/TLI 主题

异步执行模式

高级 XTI/TLI 编程示例

异步联网

联网编程模型

异步无连接模式服务

使端点异步

异步网络传输

异步连接模式服务

异步建立连接

异步使用连接

异步打开

传输文件描述符

状态转换

XTI/TLI 状态

传出事件

传入事件

状态表

协议独立性准则

XTI/TLI 与套接字接口

套接字到 XTI/TLI 的等效项

XTI 接口的附加功能

10.  包过滤钩子

11.  传输选择和名称到地址映射

12.  实时编程和管理

13.  Solaris ABI 和 ABI 工具

A.  UNIX 域套接字

索引

XTI/TLI 读/写接口

用户可能需要对现有程序(如 /usr/bin/cat)使用 exec(2) 来建立传输连接,以便处理通过该连接收到的数据。现有程序使用 read(2)write(2)。XTI/TLI 并不直接支持传输提供器的读/写接口,但是有一个接口可用。利用此接口,可以在数据传输阶段通过传输连接发出 read(2)write(2) 调用。本节介绍 XTI/TLI 连接模式服务的读/写接口。此接口不适用于无连接模式服务。

示例 9-1 读/写接口

#include <stropts.h>

/* Same local management and connection establishment steps. */

if (ioctl(fd, I_PUSH, "tirdwr") == -1) {
    perror(“I_PUSH of tirdwr failed”);
    exit(5);
}
close(0);
dup(fd);
execl(“/usr/bin/cat”, “/usr/bin/cat”, (char *) 0);
perror(“exec of /usr/bin/cat failed”);
exit(6);

客户机通过将 tirdwr 推送到与传输端点关联的流来调用读/写接口。有关 I_PUSH 的说明,请参见 streamio(7I) 手册页。tirdwr 模块将位于传输提供器之上的 XTI/TLI 转换为纯读/写接口。使用该模块后,客户机将调用 close(2)dup(2) 来建立传输端点作为其标准输入文件,并使用 /usr/bin/cat 来处理输入。

tirdwr 推送到传输提供器会强制 XTI/TLI 使用 read(2)write(2) 语义。使用 readwrite 语义时,XTI/TLI 不保留消息边界。请从传输提供器弹出 tirdwr 以恢复 XTI/TLI 语义(有关 I_POP 的说明,请参见 streamio(7I) 手册页)。


注意

注意 - 仅当传输端点位于数据传输阶段时,才将 tirdwr 模块推送到流。推送该模块之后,用户不能调用任何 XTI/TLI 例程。如果用户调用 XTI/TLI 例程,则 tirdwr 会在流上生成致命的协议错误 EPROTO,表明该例程不可用。如果随后将 tirdwr 模块弹出该流,则该传输连接将异常中止。有关 I_POP 的说明,请参见 streamio(7I) 手册页。


写入数据

使用 write(2) 通过传输连接发送数据之后,tirdwr 将数据传递到传输提供器。如果发送的数据包长度为零(该机制允许),则 tirdwr 会放弃该消息。如果传输连接异常中止,则会在流上生成挂起状态,后续 write(2) 调用将失败,并且 errno 被设置为 ENXIO。例如,远程用户使用 t_snddis(3NSL) 异常中止连接时可能会出现此问题。挂起之后,仍可以检索任何可用数据。

读取数据

可使用 read(2) 接收到达传输连接的数据。tirdwr 会传递来自传输提供器的数据。tirdwr 模块可处理从提供器传递至用户的任何其他事件或请求,如下所述:

关闭连接

利用流上的 tirdwr,在连接有效期间内,可以通过传输连接发送和接收数据。用户可通过关闭与传输端点关联的文件描述符来终止连接,也可通过将 tirdwr 模块弹出流来终止连接。在上述任一情况下,tirdwr 都会执行以下操作:

tirdwr 推送到流之后,进程便不能启动顺序释放。如果位于传输连接另一端的用户启动了顺序释放,tirdwr 将处理该释放。如果该部分中的客户机与服务器程序进行通信,则该服务器会使用顺序释放请求终止数据的传输。然后,该服务器将等待客户机的相应请求。此时,该客户机将退出并关闭传输端点。关闭文件描述符之后,tirdwr 会启动来自连接客户端的顺序释放请求。该释放会生成阻塞服务器的请求。

某些协议(如 TCP)要求此顺序释放以确保完整传送数据。