TLI(传输层接口),这是AT&T System V R4定义的一套与套接字并行的网络编程API。它建立在STREAMS框架之上,通过打开传输提供者的设备文件(如/dev/tcp)获得一个文件描述符,从而能以协议无关的方式操作TCP、UDP等不同传输服务。第三版因POSIX标准化已完全移除TLI,但它在历史上曾是重要的网络编程模型。
TLI的函数命名以t_开头,紧密对应传输服务原语。典型流程为:调用t_open打开传输端点,用t_bind绑定本地地址;客户端通过t_connect发起连接,服务器则循环执行t_listen等待连接请求,再用t_accept建立新的连接端点。数据交换使用t_snd和t_rcv,断连由t_snddis/t_rcvdis处理,最后t_close关闭端点。所有操作围绕整数描述符进行,可集成到select/poll多路复用中。
与套接字相比,TLI的差异显著:它依赖STREAMS设备文件指定协议,而非socket()的协议族/类型参数;地址结构统一为包含长度和缓冲指针的struct netbuf,而非各类sockaddr变体;连接接收必须显式通过t_listen和t_accept两步完成,不能像套接字那样在accept中直接获得已就绪连接;选项管理则使用专门的t_optmgmt函数。这些设计使TLI的状态机更显式,但也增加了编程复杂性。
如今TLI已完全过时,主流系统均以套接字为主。学习它主要是为了读懂《UNIX网络编程》第二版的老代码,或理解传输层接口的通用抽象——连接建立、数据传送、连接释放的生命周期,这对深入网络编程思想仍有帮助。