Unix域套接字详解(附源码)

本文详细介绍了Unix域套接字的通信模型,包括API接口的使用,如socket()、bind()、recvfrom()和sendto()。讲解了Unix域套接字的地址结构、普通路径名与抽象路径名的区别,以及权限设置。此外,还提供了Unix域套接字在数据包模式下的应用示例代码。
摘要由CSDN通过智能技术生成

                                                 图1 Unix域套接字通信模型

1.Unix域通信模型

Unix域套接字通信模型如图1所示

2.api接口

1)socket()

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

API定义是一样的,不过这里的第一个参数,也就是域一定要设置成AF_UNIX或AF_LOCAL,而不是普通TCP/IP套接字的AF_INET。第二个参数表示套接字的类型,分为流套接字(SOCK_STREAM)和数据包套接字(SOCK_DGRAM)。不同于普通的AF_INET的Socket,由于都是在本机通过内核通信,所以SOCK_STREAM和SOCK_DGRAM都是可靠的,不会丢包也不会出现发送包的次序和接收包的次序不一致的问题。它们的区别仅仅是,SOCK_STREAM无论发送多大的数据都不会被截断,而对于SOCK_DGRAM来说,如果发送的数据超过了一个报文的最大长度,则数据会被截断。而最后一个参数,表示协议,对于Unix域套接字来说,其一定是被设置成0。因此,一般通过下面的方式创建一个Unix域套接字:

int sockfd = socket(PF_LOCAL,SOCK_DGRAM, 0);    // 数据包式套接字  

2)bind()

对于流式套接字的服务器端来说,在用socket()函数获得了新创建套接字的文件描述符之后,还要将其绑定到一个地址上去:

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);  

在Unix域套接字中,套接字的地址是以sockaddr_un结构体来表示的,其结构如下:

struct sockaddr_un {  

         sa_family_t sun_family;  

         char 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值