Linux 环境进程间通信(六):套接字2008-04-10 13:16在本专题的前面几个部分,如消息队列、信号灯、共享内存等,都是基于 Sys V 的 IPC 机制进行讨论的,它们的应用局限在单一计算机内的进程间通信;基于 BSD 套接口不仅可以实现单机内的进程间通信,还可以实现不同计算机进程之间 的通信
本文将主要介绍 BSD 套接口(sockets),以及基于套接口的重要而基本的 API
一个套接口可以看作是进程间 通信的端点(endpoint),每个套接口的名字都是唯一的(唯一的含义是不言而喻的),其他进程可以发现、连接并且与之通信
通信域用来说明套接口通 信的协议,不同的通信域有不同的通信协议以及套接口的地址结构等等,因此,创建一个套接口时,要指明它的通信域
比较常见的是 unix 域套接口(采用套接 口机制实现单机内的进程间通信)及网际通信域
1、背景知识linux 目前的网络内核代码主要基于伯克利的 BSD 的 unix 实现,整个结构采用的是一种面向对象的分层机制
层与层之间有严格的接口定义
这里我们引用[1]中的一个图表来描述 linux 支持的一些通信协议:我们这里只关心 IPS,即因特网协议族,也就是通常所说的 TCP/IP 网络
我们这里假设读者具有网络方面的一些背景知识,如了解网络的分层结构,通常所说的 7 层结构;了解 IP 地址以及路由的一些基本知识
目 前 linux 网络 API 是基于 BSD 套接口的(系统 V 提供基于流 I/O 子系统的用户接口,但是 linux 内核目前不支持流 I/O 子系统)
套接口可以说是 网络编程中一个非常重要的概念,linux 以文件的形式实现套接口,与套接口相应的文件属于 sockfs 特殊文件系统,创建一个套接口就是在 sockfs 中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构