socket unix domain IPC的实例代码
发布时间 - 2026-01-10 22:10:15 点击率:次仅供参考:

服务端:socket->bind->listen->send/recv->close
客户端:socket->bind->connect->send/recv->close
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/un.h>
#include <pthread.h>
#include <cstring>
#include <cstdio>
#include <unistd.h>
#include <signal.h>
#define filename "test.socket"
void setnonblocking(int fd)
{
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
}
void *client_func(void *arg)
{
sleep(3);
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
setnonblocking(fd);
sockaddr_un un;
memset(&un, 0, sizeof(un));
un.sun_family = AF_UNIX;
sprintf(un.sun_path, "file_%d.socket", (int)getpid());
unlink(un.sun_path);
socklen_t len = sizeof(un);
bind(fd, (sockaddr *)&un, sizeof(un));
strcpy(un.sun_path, filename);
int ret = connect(fd, (sockaddr *)&un, len);
if (ret == -1)
{
printf("connect server failed...\n");
close(fd);
return NULL;
}
char buf[256];
memset(buf, 0, sizeof(buf));
strcpy(buf, "hello world");
int n = send(fd, buf, strlen(buf)+1, 0);
printf("send data, %d bytes..\n", n);
sleep(5);
close(fd);
return NULL;
}
int main()
{
unlink(filename);
signal(SIGPIPE, SIG_IGN);
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));
setnonblocking(fd);
sockaddr_un un;
memset(&un, 0, sizeof(un));
un.sun_family = AF_UNIX;
strcpy(un.sun_path, filename);
bind(fd, (sockaddr *)&un, sizeof(un));
listen(fd, 100);
pthread_t pid;
pthread_create(&pid, NULL, client_func, NULL);
sockaddr_un uu;
socklen_t len = sizeof(uu);
while (true)
{
memset(&uu, 0, len);
int newfd = accept(fd, (sockaddr *)&uu, &len);
if (newfd != -1)
{
setnonblocking(newfd);
printf("newfd = %d, path = %s\n", newfd, uu.sun_path);
char buf[512];
memset(buf, 0, sizeof(buf));
int n = recv(newfd, buf, 512,0);
printf("recv %d bytes, contents is %s\n", n, buf);
}
usleep(100000);
}
close(fd);
return 0;
}
以上就是小编为大家带来的socket unix domain IPC的实例代码全部内容了,希望大家多多支持~
# socket
# unix
# domain
# IPC
# 小编
# 服务端
# 大家多多
# 客户端
# 仅供参考
# signal
# unistd
# define
# filename
# arpa
# cstdio
# pthread
# fcntl
# cstring
# inet
# errno
# client_func
# O_NONBLOCK
# F_GETFL
# AF_UNIX
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速查询网址的建站时间与历史轨迹?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在万网自助建站中设置域名及备案?
jQuery validate插件功能与用法详解
5种Android数据存储方式汇总
LinuxCD持续部署教程_自动发布与回滚机制
iOS发送验证码倒计时应用
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何快速搭建支持数据库操作的智能建站平台?
如何在景安服务器上快速搭建个人网站?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何彻底删除建站之星生成的Banner?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
EditPlus中的正则表达式 实战(4)
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
JavaScript常见的五种数组去重的方式
如何基于PHP生成高效IDC网络公司建站源码?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何快速搭建高效服务器建站系统?
如何快速启动建站代理加盟业务?
如何利用DOS批处理实现定时关机操作详解
实现点击下箭头变上箭头来回切换的两种方法【推荐】
大型企业网站制作流程,做网站需要注册公司吗?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel怎么实现模型属性的自动加密
如何用PHP快速搭建CMS系统?
Laravel如何处理CORS跨域请求?(配置示例)
Swift中swift中的switch 语句
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何为不同团队 ID 动态生成多个“认领值班”按钮
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Android中AutoCompleteTextView自动提示
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
PythonWeb开发入门教程_Flask快速构建Web应用
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
如何在宝塔面板中创建新站点?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
简历没回改:利用AI润色让你的文字更专业
手机软键盘弹出时影响布局的解决方法
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel如何使用Eloquent进行子查询
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】

