电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Linux 环境进程间通信(六)套接字VIP免费

Linux 环境进程间通信(六)套接字_第1页
1/10
Linux 环境进程间通信(六)套接字_第2页
2/10
Linux 环境进程间通信(六)套接字_第3页
3/10
第1页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共10页Linux环境进程间通信(六):套接字2008-04-1013:16在本专题的前面几个部分,如消息队列、信号灯、共享内存等,都是基于SysV的IPC机制进行讨论的,它们的应用局限在单一计算机内的进程间通信;基于BSD套接口不仅可以实现单机内的进程间通信,还可以实现不同计算机进程之间的通信。本文将主要介绍BSD套接口(sockets),以及基于套接口的重要而基本的API。一个套接口可以看作是进程间通信的端点(endpoint),每个套接口的名字都是唯一的(唯一的含义是不言而喻的),其他进程可以发现、连接并且与之通信。通信域用来说明套接口通信的协议,不同的通信域有不同的通信协议以及套接口的地址结构等等,因此,创建一个套接口时,要指明它的通信域。比较常见的是unix域套接口(采用套接口机制实现单机内的进程间通信)及网际通信域。1、背景知识linux目前的网络内核代码主要基于伯克利的BSD的unix实现,整个结构采用的是一种面向对象的分层机制。层与层之间有严格的接口定义。这里我们引用[1]中的一个图表来描述linux支持的一些通信协议:第2页共10页第1页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共10页我们这里只关心IPS,即因特网协议族,也就是通常所说的TCP/IP网络。我们这里假设读者具有网络方面的一些背景知识,如了解网络的分层结构,通常所说的7层结构;了解IP地址以及路由的一些基本知识。目前linux网络API是基于BSD套接口的(系统V提供基于流I/O子系统的用户接口,但是linux内核目前不支持流I/O子系统)。套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构。换句话说,对每一个新创建的BSD套接口,linux内核都将在sockfs特殊文件系统中创建一个新的inode。描述套接口的数据结构是socket,将在后面给出。2、重要数据结构下面是在网络编程中比较重要的几个数据结构,读者可以在后面介绍编程API部分再回过头来了解它们。(1)表示套接口的数据结构structsocket套接口是由socket数据结构代表的,形式如下:structsocket{socket_statestate;/*指明套接口的连接状态,一个套接口的连接状态可以有以下几种套接口是空闲的,还没有进行相应的端口及地址的绑定;还没有连接;正在连接中;已经连接;正在解除连接。*/unsignedlongflags;structproto_opsops;/*指明可对套接口进行的各种操作*/structinodeinode;/*指向sockfs文件系统中的相应inode*/structfasync_struct*fasync_list;/*Asynchronouswakeuplist*/structfile*file;/*指向sockfs文件系统中的相应文件*/structsocksk;/*任何协议族都有其特定的套接口特性,该域就指向特定协议族的套接口对象。*/wait_queue_head_twait;第3页共10页第2页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共10页shorttype;unsignedcharpasscred;};(2)描述套接口通用地址的数据结构structsockaddr由于历史的缘故,在bind、connect等系统调用中,特定于协议的套接口地址结构指针都要强制转换成该通用的套接口地址结构指针。结构形式如下:structsockaddr{sa_family_tsa_family;/*addressfamily,AF_xxx*/charsa_data[14];/*14bytesofprotocoladdress*/};(3)描述因特网地址结构的数据结构structsockaddr_in(这里局限于IP4):structsockaddr_in{__SOCKADDR_COMMON(sin_);/*描述协议族*/in_port_tsin_port;/*端口号*/structin_addrsin_addr;/*因特网地址*//*Padtosizeof`structsockaddr'.*/unsignedcharsin_zero[sizeof(structsockaddr)-__SOCKADDR_COMMON_SIZE-sizeof(in_port_t)-sizeof(structin_addr)];};一般来说,读者最关心的是前三个域,即通信协议、端口号及地址。3、套接口编程的几个重要步骤:第4页共10页第3页共10页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共10页(1)创建套接口,由系统调用soc...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Linux 环境进程间通信(六)套接字

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部