- 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)