网络IPC套接字详解:从基础到高级.pdfVIP

  • 0
  • 0
  • 约1.11万字
  • 约 46页
  • 2026-02-10 发布于北京
  • 举报

UNIX高级编程——网络IPC

套接字

之前我们将的IPC机制都是在同一台计算机上运

行的。通过网络将不同的计算机中的进程连接

起来我们使用的就是套接字(网络IPC)。

套接字接口不仅可以用于在网络上的计算机通

信,也可以用于计算机内的通信。

套接字是通信端点的抽象。与应用程序要使用文

件描述符来访问文件一样,套接字也需要套接

字描述符。

函数原型:#includesys/socket

intsocket(intdomain,inttype,

intprotocol);

成功返回套接字描述符,出错返回-1

域,确定通信的特性说明

因特网域

因特网域

未指定代表任何域

这些域都是POSIX.1指定的。AF全称地址族

(addressfamily)。

套接字的类型说明

长度固定的、无连接的不可靠报文传递

协议的数据报接口

长度固定、有序、可靠的面相连接报文传递

有序、可靠、双向的面相连接字节流

protocol参数通常是0,表示按给定的域和套接字

类型选择默认协议。AF_INET与SOCK_STREAM的

默认协议是TCP(传输控制协议);与SOCK_DGRAM

的默认协议是UDP(用户数据报协议)

数据报是通过网络传输的数据的基本单元,包含

一个报头和数据本身,其中报头描述了数据的

目的地以及和其它数据之间的关系。整个数据

报传送过程中,网络节点为每个数据报作路由

选择,各数据报不能保证按顺序到达目的节

点,有些还可能会丢失。

面相连接的协议通信,就需要先建立起连接,再

进行数据处理。

SOCK_DGRAM套接字,与对方通信时不需要逻辑连

接的,只需要送出一个报文,其地址是一个对

方进程所使用的套接字。

SOCK_STREAM套接字,要求在交换数据之前,在本

地套接字和与之通信的远程套接字之间建立一

个逻辑连接。

SOCK_SEQPACKET套接字,和SOCK_STREAM套接字的

区别在于该套接字得到的是基于报文的服务而

不是字节流服务。

SOCK_RAW套接字,提供一个数据报接口用于直接

访问网络层,使用这种套接字时,应用程序负

责构造自己的协议首部(传输协议被绕过),创

建时需要root用户特权,用以防止恶意程序绕

过内建安全机制来创建报文。

套接字通信是双向的,可以用函数来关闭套接字

上的输入/输出

函数原型:#includesys/socket.h

intshutdown(intsockfd,inthow);

成功返回0,出错返回-1

how为SHUT_RD表示关闭读端

how为SHUT_WR表示关闭写端

how为SHUT_RDWR表示关闭读写端。

套接字可以使用close来进行关闭,但是需要注意

的是,close只有在最后一个活动引用被关闭时

才释放网络端点,如果复制一个套接字,套接

字直到关闭了最后一个引用它的文件描述符才

会被释放。而shutdown允许时一个套接字处于

不活动状态,无论引用它的文件描述符数目是

多少。

套接字本质上是一个文件描述符,但是需要注意

的是,能操作文件描述符的函数,不一定能操

作套接字。

列出部分能够操作套接字的文件描述符函数:

close、dup、dup2、fcntl、poll、select等

寻址

字节序是一个处理器架构特

文档评论(0)

1亿VIP精品文档

相关文档