以下各节中的表介绍与 XTI/TLI 关联的所有状态转换。
下表定义 XTI/TLI 状态转换中使用的状态以及服务类型。
表 8–1 XTI/TLI 状态转换和服务类型
状态 |
说明 |
服务类型 |
---|---|---|
T_UNINIT |
未初始化-接口的初始状态和最终状态 |
T_COTS、T_COTS_ORD、T_CLTS |
T_UNBND |
已初始化但未绑定 |
T_COTS、T_COTS_ORD、T_CLTS |
T_IDLE |
未建立连接 |
T_COTS、T_COTS_ORD、T_CLTS |
T_OUTCON |
针对客户机暂挂的传出连接 |
T_COTS、T_COTS_ORD |
T_INCON |
针对服务器暂挂的传入连接 |
T_COTS、T_COTS_ORD |
T_DATAXFER |
数据传送 |
T_COTS、T_COTS_ORD |
T_OUTREL |
传出顺序释放(等待顺序释放请求) |
T_COTS_ORD |
T_INREL |
传入顺序释放(等待发送顺序释放请求) |
T_COTS_ORD |
下表中介绍的传出事件与指定传输例程(发送请求或响应传输提供器的例程)返回的状态相对应。在该表中,某些事件(例如 "accept")根据发生它们的上下文来区分。上下文基于以下变量的值:
ocnt-未完成连接请求的计数
fd-当前传输端点的文件描述符
resfd-接受连接的传输端点的文件描述符
事件 |
说明 |
服务类型 |
---|---|---|
opened |
成功返回 t_open(3NSL) |
T_COTS、T_COTS_ORD、T_CLTS |
bind |
成功返回 t_bind(3NSL) |
T_COTS、T_COTS_ORD、T_CLTS |
成功返回 t_optmgmt(3NSL) |
T_COTS、T_COTS_ORD、T_CLTS |
|
unbind |
成功返回 t_unbind(3NSL) |
T_COTS、T_COTS_ORD、T_CLTS |
closed |
成功返回 t_close(3NSL) |
T_COTS、T_COTS_ORD、T_CLT |
connect1 |
在同步模式下成功返回 t_connect(3NSL) |
T_COTS、T_COTS_ORD |
connect2 |
异步模式下 t_connect(3NSL) 上的 TNODATA 错误,或者由于传输端点上到达断开请求而产生的 TLOOK 错误 |
T_COTS、T_COTS_ORD |
accept1 |
t_accept(3NSL) 成功返回,且 ocnt == 1、fd == resfd |
T_COTS、T_COTS_ORD |
accept2 |
t_accept(3NSL) 成功返回,且 ocnt== 1、fd!= resfd |
T_COTS、T_COTS_ORD |
accept3 |
t_accept(3NSL) 成功返回,且 ocnt > 1 |
T_COTS、T_COTS_ORD |
snd |
成功返回 t_snd(3NSL) |
T_COTS、T_COTS_ORD |
snddis1 |
t_snddis(3NSL) 成功返回,且 ocnt <= 1 |
T_COTS、T_COTS_ORD |
snddis2 |
t_snddis(3NSL) 成功返回,且 ocnt > 1 |
T_COTS、T_COTS_ORD |
sndrel |
成功返回 t_sndrel(3NSL) |
T_COTS_ORD |
sndudata |
成功返回 t_sndudata(3NSL) |
T_CLTS |
传入事件与指定例程的成功返回相对应。这些例程返回来自传输提供器的数据或事件信息。不与例程的返回直接关联的唯一传入事件是 pass_conn,该传入事件在连接传送到其他端点时发生。虽然未在连接传送到的端点上调用 XTI/TLI 例程,但是会在该端点上发生事件。
在下表中,rcvdis 事件根据 ocnt 值(端点上未完成的连接请求计数)来区分。
表 8–3 传入事件
事件 |
说明 |
服务类型 |
---|---|---|
listen |
成功返回 t_listen(3NSL) |
T_COTS、T_COTS_ORD |
rcvconnect |
成功返回 t_rcvconnect(3NSL) |
T_COTS、T_COTS_ORD |
rcv |
成功返回 t_rcv(3NSL) |
T_COTS、T_COTS_ORD |
rcvdis1 |
成功返回 t_rcvdis(3NSL) rcvdis1t_rcvdis()、onct <= 0 |
T_COTS、T_COTS_ORD |
rcvdis2 |
成功返回 t_rcvdis(3NSL)、ocnt == 1 |
T_COTS、T_COTS_ORD |
rcvdis3 |
t_rcvdis(3NSL) 成功返回,且 ocnt > 1 |
T_COTS、T_COTS_ORD |
rcvrel |
成功返回 t_rcvrel(3NSL) |
T_COTS_ORD |
rcvudata |
成功返回 t_rcvudata(3NSL) |
T_CLTS |
rcvuderr |
成功返回 t_rcvuderr(3NSL) |
T_CLTS |
pass_conn |
接收传递的连接 |
T_COTS、T_COTS_ORD |
状态表描述 XTI/TLI 状态转换。每个框都包含下一个状态,假设已给定当前状态(列)和当前事件(行)。空框表示无效状态/事件组合。每个框还可具有一个操作列表。必须按照框中指定的顺序完成操作。
研究状态表时,应了解以下内容:
t_close(3NSL) 针对面向连接的传输提供器终止已建立的连接。连接将按顺序终止或异常终止,具体取决于传输提供器支持的服务类型。请参见 t_getinfo(3NSL) 手册页。
如果传输用户发出无序接口调用,该接口将失败并将 t_errno 设置为 TOUTSTATE。状态不会更改。
t_connect(3NSL) 之后的错误代码 TLOOK 或 TNODATA 可以导致状态更改。状态表假设正确使用 XTI/TLI。
任何其他传输错误都不会更改状态,除非接口的手册页另行指出。
可从状态表中排除支持接口 t_getinfo(3NSL)、t_getstate(3NSL)、t_alloc(3NSL)、t_free(3NSL)、t_sync(3NSL)、t_look(3NSL) 以及 t_error(3NSL),因为它们并不影响状态。
下面各表中列出的某些状态转换提供传输用户必须执行的操作。每项操作都由按以下方法得出的数字表示:
将未完成连接请求的计数设置为零
递增未完成连接请求的计数
递减未完成连接请求的计数
将连接传递到其他传输端点,如 t_accept(3NSL) 手册页中所示
下表给出了端点建立状态。
表 8–4 连接建立状态
事件/状态 |
T_UNINIT |
T_UNBND |
T_IDLE |
---|---|---|---|
opened |
T_UNBND |
|
|
bind |
|
T_IDLE[1] |
|
|
|
T_IDLE |
|
unbind |
|
|
T_UNBND |
closed |
|
T_UNINIT |
|
下表给出了连接模式下的数据传送。
表 8–5 连接模式状态-第 1 部分
事件/状态 |
T_IDLE |
T_OUTCON |
T_INCON |
T_DATAXFER |
---|---|---|---|---|
connect1 |
T_DATAXFER |
|
|
|
connect2 |
T_OUTCON |
|
|
|
rcvconnect |
|
T_DATAXFER |
|
|
listen |
T_INCON [2] |
|
T_INCON [2] |
|
accept1 |
|
|
T_DATAXFER [3] |
|
accept2 |
|
|
T_IDLE [3] [4] |
|
accept3 |
|
|
T_INCON [3] [4] |
|
snd |
|
|
|
T_DATAXFER |
rcv |
|
|
|
T_DATAXFER |
snddis1 |
|
T_IDLE |
T_IDLE [3] |
T_IDLE |
snddis2 |
|
|
T_INCON [3] |
|
rcvdis1 |
|
T_IDLE |
|
T_IDLE |
rcvdis2 |
|
|
T_IDLE [3] |
|
rcvdis3 |
|
|
T_INCON [3] |
|
sndrel |
|
|
|
T_OUTREL |
rcvrel |
|
|
|
T_INREL |
pass_conn |
T_DATAXFER |
|
|
|
T_IDLE |
T_OUTCON |
T_INCON |
T_DATAXFER |
|
closed |
T_UNINIT |
T_UNINIT |
T_UNINIT |
T_UNINIT |
下表给出了连接模式下的连接建立/连接释放/数据传送。
表 8–6 连接模式状态-第 2 部分
事件/状态 |
T_OUTREL |
T_INREL |
T_UNBND |
---|---|---|---|
connect1 |
|
|
|
connect2 |
|
|
|
rcvconnect |
|
|
|
listen |
|
|
|
accept1 |
|
|
|
accept2 |
|
|
|
accept3 |
|
|
|
snd |
|
T_INREL |
|
rcv |
T_OUTREL |
|
|
snddis1 |
T_IDLE |
T_IDLE |
|
snddis2 |
|
|
|
rcvdis1 |
T_IDLE |
T_IDLE |
|
rcvdis2 |
|
|
|
rcvdis3 |
|
|
|
sndrel |
|
T_IDLE |
|
rcvrel |
T_IDLE |
|
|
pass_conn |
|
| |
optmgmt |
T_OUTREL |
T_INREL |
T_UNBND |
closed |
T_UNINIT |
T_UNINIT |
|
下表给出了无连接模式状态。
表 8–7 无连接模式状态
事件/状态 |
T_IDLE |
---|---|
snudata |
T_IDLE |
rcvdata |
T_IDLE |
rcvuderr |
T_IDLE |