一、介绍
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