Linux Unix域套接字
来源:互联网 发布:网络编辑岗位要求 编辑:程序博客网 时间:2024/06/17 13:44
套接字API多用于网络通信,用于不同主机间进行通信,虽然也可以用于同一主机进程间通信,但是没有Unix域套接字效率高。Unix域套接字用于同一主机进程间通信(即单个主机上客户/服务器通信),提供两种套接字类型字节流套接字(类似TCP)和数据报套接字(类似UDP)。
1、Unix域套接字结构
#include <sys/un.h>struct sockaddr_un{ sa_family_t sun_family; /*AF_LOCAL*/ char sun_path[108]; /*null terminated pathname*/};/* 说明: * sun_family 为套接字家族,为AF_LOCAL,也可以是AF_UNIX; * sun_path[108]为保存路径的数组,大小也可能是104,由系统决定,路径由空字符结束; * 空字符(sun_path[0]=0)表示未指定地址,等价于IPv4中的INADDR_ANY; * 用于获取结构长度的宏:SUN_LEN(&str),参数为该结构的一个指针,返回的是实际的数据长度,不包含空字节; */
Unix域套接字应用类似网络套接字,都是通过socket函数来获取一个套接字描述符。简单应用如下:
#include <sys/un.h>#include <sys/socket.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){ int sockfd; socklen_t len; struct sockaddr_un addr1, addr2; char path[] = "/home/centos/tsdir"; unlink(path); //delete file sockfd = socket(AF_LOCAL, SOCK_STREAM, 0); bzero(&addr1, sizeof(addr1)); addr1.sun_family = AF_LOCAL; strncpy(addr1.sun_path, path, sizeof(addr1.sun_path)-1); //memcpy(addr1.sun_path, path, sizeof(path)); bind(sockfd, (struct sockaddr*) &addr1, SUN_LEN(&addr1)); len = sizeof(addr2); getsockname(sockfd, (struct sockaddr*) &addr2, &len); printf("bound name = %s, returned len = %d\n", addr2.sun_path, len); exit(0);}
代码中创建一个Unix域套接字,由bind函数绑定到由socket函数获取的描述符上,套接字的地址为本地的一个路径名,利用getsockname得到并输出地址。
unlink用于删除路径名,以防止它已存在;
strncpy用于复制路径到相应位置,注释的memcpy功能相同;
路径名必须是绝对路径;
对于UDP来说,客户端套接字必须绑定一个路径名,以使UDP服务器有发送应答的目的地;
2、socketpair 函数
/* 功能:创建两个连接起来的套接字,仅适用于Unix域套接字; * 返回值:成功则为0,出错则为-1; * 定义: */#include <sys/socket.h>int socketpair(int family, int type, int protocol, int sockfd[2]);/* 说明: * family 参数必须为AF_LOCAL; * protocol 必须为0; * type 可以是SOCK_STREAM,SOCK_DGRAM; * sockfd 存储新建的两个描述符; * 两个描述符既可读又可写; */
UNIX域套接字编程和socketpair 函数;
0 0
- Linux Unix域套接字
- Unix域套接字
- UNIX域套接字
- UNIX域套接字
- Unix域套接字
- unix域套接字
- Unix域套接字
- UNIX域套接字
- Unix域套接字
- Unix域套接字
- Unix域套接字
- Unix域套接字
- Unix域套接字
- unix域套接字
- Unix域套接字
- unix域套接字
- unix域套接字
- Linux/UNIX套接字连接
- Tomcat JVM、并发配置
- 【USACO】2011 Feb Cowlphabet 奶牛文字
- USB设备首次接入电脑时遇到的一些问题及解决方法
- (十三)ArcGIS API For Javascript之网络分析
- SLSP直播流媒体协议
- Linux Unix域套接字
- web 项目 压力测试 ab test
- 判别式模型与生成式模型
- js监听Enter事件的触发进行查找
- 关于 return return false return true
- NOIP11.3总结
- stl map底层之红黑树插入步骤详解与代码实现
- 获取指定目录下所有的文件名
- Mybatis源码分析(一)- Configuration配置文件详解