IPC|网络套接字

2022-04-18 19:25:59 浏览数 (1)

当客户需要发送一个很短小的查询请求给服务器,并且期望接收到一个短小的响应时,

我们一般就使用由UDP提供的服务。如果服务器处理客户请求的时间足够短,

服务器就可以通过一次处理一个客户请求的方式提供服务,从而允许操作系统将

客户进入的请求放入队列。这简化了服务器程序的编写。

为了访问由UDP提供的服务,你需要像以前一样使用套接字和close系统调用,但你需要用两个

数据报专用的系统调用sendto 和 recvfrom来代替原来使用在套接字上的read和write调用

套接字网络IPC接口,进程能够使用该接口和其他进程通信。通过该接口,其他进程运行位置是透明的,

它们可以在同一台计算机上也可以在不同的计算机上。同样接口既可以用于计算机间通信,有可以用于计算机内

通信。

套接字是通信端点的抽象,与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符。

代码语言:javascript复制
#include <sys/socket>
int socket(int domain, int type, int protocol);

返回值:若成功则返回文件(套接字)描述符,如果出错则返回 -1

参数domain 域确定通信的特性,包括地址格式。

表示各个域都以AF_开头,意指地址族(address family)

AF_INET ipv4 因特网域

AF_INET6 ipv6 因特网域

AF_UNIX UNIX 域

参数type 确定套接字的类型,进一步确定通信特征

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

SOCK_RAW IP协议的数据接口

SOCK_SEQPACKET 长度固定/有序/可靠的面向连接报文传递

SOCK_STREAM 有序/可靠/双向的面向连接字节流

参数protocol,通常是0,表示按给定的域和套接字类型选择默认协议

当对同一域和套接字类型支持多个协议时,可以使用protocol 参数选择一个

特定协议。在AF_INET 通信域中套接字类型SOCK_STREAAM 的默认协议时TCP(传输控制协议)

在AF_INET 通信域中套接字类型SOCK_DGRAM的默认协议时UDP(用户数据报协议)

SOCK_RAW 套接字提供一个数据报接口用于直接访问下面的网络层(在AF_INET 域中为IP)

使用这个接口时,应用程序负责构造自己的协议首部。这是因为传输协议(TCP和UDP)被绕过了

当创建一个原始套接字时需要超级用户权限,用以防止恶意程序绕过内建安全机制来创建报文。

0 人点赞