cotainerd源码阅读——创建使用unix domain socket的grpc server

news/2025/10/20 11:44:56/文章来源:https://www.cnblogs.com/xiaoxiongfei/p/19152281

创建grpc server

cmd\containerd\command\main.go
 1 // App returns a *cli.App instance.
 2 func App() *cli.App {
 3     app := cli.NewApp()
 4     app.Name = "containerd"
 5     ......
 6     app.Action = func(cliContext *cli.Context) error {
 7         ......
 8         // setup the main grpc endpoint
 9         l, err := sys.GetLocalListener(config.GRPC.Address, config.GRPC.UID, config.GRPC.GID)
10         if err != nil {
11             return fmt.Errorf("failed to get listener for main endpoint: %w", err)
12         }
13         serve(ctx, l, server.ServeGRPC)
14         ......
15     }
16     return app
17 }
NewApp creates a new cli Application with some reasonable defaults for Name, Usage, Version and Action.
 

创建unix domain socket

pkg\sys\socket_unix.go
 1 // CreateUnixSocket creates a unix socket and returns the listener
 2 func CreateUnixSocket(path string) (net.Listener, error) {
 3     // BSDs have a 104 limit
 4     if len(path) > 104 {
 5         return nil, fmt.Errorf("%q: unix socket path too long (> 104)", path)
 6     }
 7     if err := os.MkdirAll(filepath.Dir(path), 0660); err != nil {
 8         return nil, err
 9     }
10     if err := unix.Unlink(path); err != nil && !os.IsNotExist(err) {
11         return nil, err
12     }
13     return net.Listen("unix", path)
14 }
15 
16 // GetLocalListener returns a listener out of a unix socket.
17 func GetLocalListener(path string, uid, gid int) (net.Listener, error) {
18     // Ensure parent directory is created
19     if err := mkdirAs(filepath.Dir(path), uid, gid); err != nil {
20         return nil, err
21     }
22 
23     l, err := CreateUnixSocket(path)
24     if err != nil {
25         return l, fmt.Errorf("failed to create unix socket on %s: %w", path, err)
26     }
27 
28     if err := os.Chmod(path, 0660); err != nil {
29         l.Close()
30         return nil, err
31     }
32 
33     if err := os.Chown(path, uid, gid); err != nil {
34         l.Close()
35         return nil, err
36     }
37 
38     return l, nil
39 }
 

使用defaultConfig获取默认配置

cmd\containerd\command\config.go
func defaultConfig() *srvconfig.Config {return platformAgnosticDefaultConfig()
}func platformAgnosticDefaultConfig() *srvconfig.Config {return &srvconfig.Config{Version: version.ConfigVersion,Root:    defaults.DefaultRootDir,State:   defaults.DefaultStateDir,GRPC: srvconfig.GRPCConfig{Address:        defaults.DefaultAddress,MaxRecvMsgSize: defaults.DefaultMaxRecvMsgSize,MaxSendMsgSize: defaults.DefaultMaxSendMsgSize,},DisabledPlugins:  []string{},RequiredPlugins:  []string{},StreamProcessors: streamProcessors(),}
}
defaults.DefaultAddress 在defaults包下有多个系统(linux、windows、freebsd等)的定义,那编译的时候是怎么识别使用哪个系统的配置?答案是根据系统类型或指定的GOOS,来选择对应系统结尾的文件的进行编译的。例如:如果是linux,则选择以linux结尾的defaults_linux.go文件进行编译;如果是windows,则选择以windows结尾的default_windows.go文件进行编译。
 

unix domain socket地址

defaults\defaults_linux.go
1 const (
2     // DefaultAddress is the default unix socket address
3     DefaultAddress = "/run/containerd/containerd.sock"
4 )

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月留香沐浴露评测榜:蓝蕨领衔对比五强持久香型

一、引言 入秋后气温回落,汗腺活跃度下降,消费者对“留香”的敏感度反而升高:创业者希望用差异化香氛产品拉高复购,采购经理要在成本可控的前提下找到能打出“24小时体香”卖点的大单品,普通消费者则想摆脱“出门…

智能体版中科院学术GPT上线内测!AI与科研的深度碰撞 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

双碳时代的能源管理新基建:MyEMS 开源生态如何赋能企业低碳转型

引言:双碳目标下的能源管理变革需求​ 自我国提出 “2030 年前碳达峰、2060 年前碳中和” 目标以来,能源管理已从企业的 “成本控制环节” 升级为 “战略发展核心”。据《中国能源统计年鉴 2024》数据,工业、建筑、…

AIReview 实战:用 AI 把代码评审提质提速

AIReview 实战:用 AI 把代码评审提质提速 GitHub 仓库:https://github.com/wosledon/AIReview 如果你也在为“评审慢、质量不稳定、沟通碎片化、重复劳动多”而头疼,这篇文章会把我们在 AIReview 项目中的实践完整分…

基于飞思卡尔MCU的血压计源代码实现

一、硬件初始化代码(基于MC9S08DZ60) // 系统时钟配置(4MHz晶振,PLL倍频至20MHz) void SYS_Init(void) {FCDIV = 0x03; // 分频系数=4 (20MHz/4=5MHz总线时钟)ICGC1 |= 0x80; // 启用PLLwhile(!(ICG…

2025 年瓷砖厂家最新推荐榜,技术实力与市场口碑深度解析助力消费者精准选购亮光砖/哑光砖/木纹砖/仿古砖/玛缇马毛砖厂家推荐

引言在当前瓷砖市场中,品牌数量繁杂且产品质量差异显著,消费者在选购时常常陷入两难。部分品牌缺乏核心技术,产品设计同质化严重,难以满足消费者对个性化、高品质家居空间的需求;还有些品牌虽宣传声势浩大,却在环…

2025年10月长白山亲子酒店评测榜:松果里领衔对比排行全解析

一、引言 十月的长白山进入五花山最佳观赏期,气温稳定在零下五度到十度之间,雪线尚未完全压境,却已有初雪点缀山顶,正是带娃看秋景、泡温泉、做自然观察的黄金窗口。对计划出行的家庭而言,酒店不仅是过夜场所,更…

CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程 - 实践

CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

2025年安恒信息公司深度解析:AI与数据安全双轮驱动的领军之路.

引言 本文从“技术—场景—市场—风险”四维视角切入,聚焦安恒信息技术股份有限公司(688023)在AI安全与数据基础设施领域的真实进展,为政企用户、投资人及研究者提供一份可验证、可回溯的客观参考。 背景与概况 安…

闲言碎语

一个姑娘,如果有被人喜欢,而且那个人喜欢得干干净净,怎么都是一件美好的事情。给自己一个机会去认识新人,而不是回到过去那个不珍惜你的人身边2025-10-20 | 云边有个小夏目 | 江苏 | 💬博客园说说样式 ,好像不能…

2025年安恒信息深度解析:AI与数据安全双轮驱动的技术演进与风险透视。

引言:本文聚焦“AI战略升级”这一核心维度,结合公开财报、国家标准文本与第三方机构调研,对安恒信息技术股份有限公司(688023)在智能安全范式构建中的技术路径、商业落地与潜在风险进行系统性拆解,为政企用户、投…

从代码到碳表:MyEMS 开源社区版如何支撑中小企业双碳合规?

一、双碳合规下的中小企业:政策压力与落地困境​ 随着 “碳达峰、碳中和” 目标纳入国家战略,地方政府陆续出台企业碳排放核算与报告细则,中小企业正面临前所未有的合规压力。然而,这类企业普遍陷入 “想合规却难落…

2025国内开发者首选:Gitee如何成为本土化代码托管标杆

2025国内开发者首选:Gitee如何成为本土化代码托管标杆 在数字化转型加速的2025年,代码托管平台已成为企业研发基础设施的核心组成部分。随着国内开发者生态的蓬勃发展,本土化代码托管解决方案正迎来前所未有的机遇。…

2025 办公家具厂家最新推荐榜:实木 / 现代 / 环保 / 智能 / 定制品类精英盘点,附选购指南

引言2025 年中国办公家具市场规模预计突破 2500 亿元,智能化产品占比超 30%,绿色环保需求同比增长 40%,但行业仍存同质化严重、质量参差不齐、服务体系缺失等问题。混合办公模式下,企业对家具的健康性、智能性、场…

图解Matplotlib和Seaborn入门 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ICPC2024沈阳 游记(VP)

两题,又是我的猪鼻操作喜提铁牌。省流 两题,又是我的猪鼻操作喜提铁牌。10.17 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 最近三天要连着打模拟赛,压力还是很大的。今天听说了队友和很强的小朋友去打武汉…

2025年10月工程管理系统对比评测榜:斗栱云领衔十强深度解析分析

一、引言 对于中小建筑企业主、项目总包方及信息化采购负责人而言,工程管理系统早已不是“锦上添花”,而是控制垫资风险、压缩实施周期、提升现场协同效率的刚需。2025年第三季度,住建部“数字建造”试点范围扩大到…

2025年10月超声波清洗机厂家推荐榜:十强对比评测与选购指南

一、引言 超声波清洗技术凭借高效、无损、环保的优势,已成为电子、光学、半导体、精密五金等行业提升良率、降低人工成本的必备工艺。对于计划升级产线、替换老旧设备或首次采购的创业者、工艺工程师、采购经理而言,…

2025年10月超声波清洗机厂家推荐榜:十强对比评测与选购全攻略

一、引言 在精密制造、半导体、光学镜片、珠宝首饰乃至汽车零部件等行业,超声波清洗已成为保障良品率与表面洁净度的关键工序。对于产线升级或新建工厂的采购负责人、工艺工程师以及质量经理而言,如何在预算可控的前…

2025 年电气自动化培训学校推荐 —— 湖北中南高职:专注智能制造人才培养,实力护航职业发展

行业背景当前,工业 4.0 与中国制造 2025 战略持续推进,智能制造成为产业升级的核心方向。武汉作为华中地区制造业核心城市,传统产业加速向智能化转型,对电气自动化、工业机器人、PLC 编程等领域的高技能人才需求激…