【Linux】linux进程间通信unix socket(域套接字)

目录

1.unix socket(域套接字)

2.unix socket特点

3.unix socket常用接口

3.1 socket

3.2 setsockopt

3.3 bind

3.4 listen

3.5 select

4.unix socket实例

4.1 client 和 server建立连接与通讯过程

4.2 server端代码实例

4.3 client端代码实例

4.4 执行结果


1.unix socket(域套接字)

        使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信,即域套接字,将通信域指定为PF_UNIX,域套接字又称为unix socket。

2.unix socket特点

(1) 只能用于同一设备上不同进程之间的通信;

(2) 效率高于网络套接字。域套接字仅仅是复制数据,并不走协议栈;

(3) 可靠,全双工;

3.unix socket常用接口

3.1 socket

        使用socket函数创建域套接字句柄。

函数原型:

int socket(int domain, int type, int protocol);

参数说明:

domain:用于指定通信的区域

  • PF_UNIX、AF_UNIX时,表示创建UNIX域的套接字,可实现同一机器上的不同进程间的通信;
  • PF_INET和AF_INET表示网络套接字;
  • PF_PACKET用来与驱动层面收发数据报的,接收和发送报文包含链路层信息。

type :SOCK_DGRAM或者SOCK_STREAM。

  •  SOCK_STREAM:表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢;
  • SOCK_DGRAM:表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传,因为 SOCK_DGRAM 所做的校验工作少,所以效率比 SOCK_STREAM 高。

protocol 表示传输协议,常用的有 IPPROTO_TCP 和 IPPTOTO_UDP,分别表示 TCP 传输协议和 UDP 传输协议。

AF和PF的区别

  • AF 表示ADDRESS FAMILY 地址族 
  • PF 表示PROTOCL FAMILY 协议族

在windows中AF_INET与PF_INET完全一样

你可能感兴趣的:(Linux嵌入式系统专栏,linux,unix,服务器)