Linu 环境进程间通信套接字.doc

Linu 环境进程间通信套接字.doc

ID:50384824

大小:65.50 KB

页数:10页

时间:2020-03-08

Linu 环境进程间通信套接字.doc_第1页
Linu 环境进程间通信套接字.doc_第2页
Linu 环境进程间通信套接字.doc_第3页
Linu 环境进程间通信套接字.doc_第4页
Linu 环境进程间通信套接字.doc_第5页
资源描述:

《Linu 环境进程间通信套接字.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux环境进程间通信(六):套接字2008-04-1013:16在本专题的前面几个部分,如消息队列、信号灯、共享内存等,都是基于SysV的IPC机制进行讨论的,它们的应用局限在单一计算机内的进程间通信;基于BSD套接口不仅可以实现单机内的进程间通信,还可以实现不同计算机进程之间的通信。本文将主要介绍BSD套接口(sockets),以及基于套接口的重要而基本的API。一个套接口可以看作是进程间通信的端点(endpoint),每个套接口的名字都是唯一的(唯一的含义是不言而喻的),其他进程可以发现、连接并且与之通信。通信域用来说明套接口通信的协议,不同的通信域有不同的通

2、信协议以及套接口的地址结构等等,因此,创建一个套接口时,要指明它的通信域。比较常见的是unix域套接口(采用套接口机制实现单机内的进程间通信)及网际通信域。1、背景知识linux目前的网络内核代码主要基于伯克利的BSD的unix实现,整个结构采用的是一种面向对象的分层机制。层与层之间有严格的接口定义。这里我们引用[1]中的一个图表来描述linux支持的一些通信协议:10/10我们这里只关心IPS,即因特网协议族,也就是通常所说的TCP/IP网络。我们这里假设读者具有网络方面的一些背景知识,如了解网络的分层结构,通常所说的7层结构;了解IP地址以及路由的一些基本知识。目

3、前linux网络API是基于BSD套接口的(系统V提供基于流I/O子系统的用户接口,但是linux内核目前不支持流I/O子系统)。套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构。换句话说,对每一个新创建的BSD套接口,linux内核都将在sockfs特殊文件系统中创建一个新的inode。描述套接口的数据结构是socket,将在后面给出。2、重要数据结构下面是在网络编程中比较重要的几个数据结构,读者可以

4、在后面介绍编程API部分再回过头来了解它们。(1)表示套接口的数据结构structsocket套接口是由socket数据结构代表的,形式如下:structsocket{socket_statestate;/指明套接口的连接状态,一个套接口的连接状态可以有以下几种套接口是空闲的,还没有进行相应的端口及地址的绑定;还没有连接;正在连接中;已经连接;正在解除连接。/unsignedlongflags;structproto_opsops;/指明可对套接口进行的各种操作/structinodeinode;/指向sockfs文件系统中的相应inode/structfasync_

5、structfasync_list;/Asynchronouswakeuplist/structfilefile;/指向sockfs文件系统中的相应文件/structsocksk;/任何协议族都有其特定的套接口特性,该域就指向特定协议族的套接口对象。/wait_queue_head_twait;shorttype;unsignedcharpasscred;};10/10(2)描述套接口通用地址的数据结构structsockaddr由于历史的缘故,在bind、connect等系统调用中,特定于协议的套接口地址结构指针都要强制转换成该通用的套接口地址结构指针。结构形式如下

6、: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'./unsigned

7、charsin_zero[sizeof(structsockaddr)-__SOCKADDR_COMMON_SIZE-sizeof(in_port_t)-sizeof(structin_addr)];};一般来说,读者最关心的是前三个域,即通信协议、端口号及地址。3、套接口编程的几个重要步骤:10/10(1)创建套接口,由系统调用socket实现:intsocket(intdomain,inttype,intptotocol);参数domain指明通信域,如PF_UNIX(unix域),PF_INET(IPv4),PF_INET6(IPv6)等;ty

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。