Unix Socket(Linux)

本文详细介绍了Unix Socket,一种不依赖于IP的进程间通信方式。通过创建、绑定、连接等步骤实现服务器与客户端的交互。主要讨论了Unix Socket的创建、绑定、连接以及发送和接收数据的函数,如socket、bind、connect、recv和send,并给出了相关函数的使用示例。在实际应用中,如MySQL配置中,Unix Socket用于本地通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

Unix Socket是进程通信之一,Unix Socket类似与TCP/IP通信。该通信不依赖与IP,而实依赖与一个文件。在许多应用中都用到了该通信,如MySQL,在MySQL的配置文件中就有一项是本地Unix Socket通信的路径配置。

二、服务器与客户端

Server

socket
bind
accept
    send
    recv

Client

socket
connect
    send
    recv

二、函数介绍

1、创建Socket
int socket(int domain, int type, int protocol);
返回值:
	成功:创建SocketID
	失败:-1
参数:
	domain:AF_UNIX
	type:
		SOCK_STREAM:面向连接
		SOCK_DGRAM:非连接
	protocol:0

2、绑定,绑定之后会创建通信文件
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
返回值:
	成功:0
	失败:-1
参数:
	sockfd:SocketID
	addr:
		struct sockaddr_un ser;
    		bzero(&ser, sizeof(struct sockaddr_un));
    		ser.sun_family = AF_UNIX;
    		memcpy(ser.sun_path, "ListenPath", strlen("ListenPath"));	//ser.sun_path :Unix Socket通信会绑定本地文件作为通信介质
    	addrlen:sizeof(ser)

3、取消绑定,关闭Socket不会删除通信文件,需要unlink才可以删除文件
unlink("ListenPath")

4、连接
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
返回值:
	成功:0
	失败:-1
参数:
	sockfd:SocketID
	addr:
		sockaddr_un addr;
    		bzero(&addr, sizeof(addr));
    		addr.sun_family = AF_UNIX;
    		memcpy(addr.sun_path, "ListenPath", strlen("ListenPath");
    	addrlen:sizeof(addr)
    
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
返回值:
    成功:接受长度
    失败:
        -1:接受失败
        0:Socket断开
参数:
    sockfd:socket id
    buf:接受内容
    len:接受长度
    flags:默认为0

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
返回值:
    成功:发送长度
    失败:
        -1:发送失败
        0:Socket断开
参数:
    sockfd:socket id
    buf:发送内容
    len:发送长度
    flags:默认为0
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值