UNIX网络编程笔记(11)—UNIX域套接字

本文介绍了UNIX域套接字,一种在单主机上的客户/服务器通信方式,分为字节流和数据报套接字。讲解了Unix域套接字地址结构、socketpair函数及其参数,并提供了字节流和数据报客户/服务器程序的代码示例。
摘要由CSDN通过智能技术生成

UNIX网络编程笔记(11)—UNIX域套接字

1.简介

Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通讯的一种方式,单个主机上执行通信,也就是所谓的进行间通信(IPC),所以Unix域套接字协议可以视作IPC方法之一。

Unix域提供两类套接字:字节流套接字(类似TCP)和数据报套接字(类似DUP)。

Unix域中用于标识客户和服务器的协议地址是普通文件系统中的路径名(但需要和Unix域套接字关联起来),否则无法读写这些文件。回忆一蛤,IPv4的协议地址由一个32位地址和16位端口号构成,IPv6协议地址则由一个128位地址和16位端口号组成。


2.Unix域套接字地址结构

#include <sys/un.h>
struct sockaddr_un {
    sa_family_t sum_family;// AF_LOCAL或者AF_UNIX
    char sun_path[104];//字符串指代路径(null终止)
};

sun_path表示与套接字关联的地址,以NULL结尾,如果未指定地址通则通过以空字符串作为路径名指示,也就是说sun_path[0]值为0,这个效果就好像Ipv4的INADDR_ANY和IPv6的ADDR_ANY_INIT


3.socketpair函数

这个是UNIX域套接字特有的函数,它创建两个素侯连接起来的套接字。

#include <sys/socket.h>
int socketpair(int family , int type , int protocol ,int sockfd[2]);
//返回:成功则为0,出错则为-1

3.1参数说明

family: 为AF_LOCAL或者AF_UNIX
type:既可以是SOCK_STREAM也可以是SOCK_DGRAM
protocol:必须为0。
sockfd[2]:新创建的两个套接字别在sockfd[0]和sockfd[1]中返回。

当设置type参数为SOCK_STREAM时,得到的结果就叫做流管道这与pipe创建的的普通UNIX管道类似了。差别在于流管道是全双工的,也就是说,两个描述符既可读也可写。回忆一蛤,用pipe创建的匿名管道,pipefd[0]用于读操作,pipefd[1]用于写操作。


4.UNIX域套接字编程

还是根据UNP1中的代码写的,主要工作就是把包裹函数拆开。

4.1 Unix域字节流客户/服务器程序

跟TCP客户服务程序类似,不过在bind步骤中,是将特定的path与套接字绑定。

代码

服务器程序

//unixdomainserv.c

#include <sys/un.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <stdio.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <errno.h>

#define UNIXDOMAIN_PATH "/tmp/unix.str"
#define MAXLEN 1024
void sig_child(int);
void str_echo(int );
typedef void(*sig_handle)(int);//handle

int main(int argc ,char **argv)
{
    int listenfd;
    int connfd;
    socklen_t clilen;
    struct sockaddr_un cliaddr,servaddr;
    pid_t childpid;

    if((listenfd = socket(AF_LOCAL,SOCK_STREAM,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值