当前位置: 首页 > news >正文

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

创建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.jsqmd.com/news/17310/

相关文章:

  • 2025年10月留香沐浴露评测榜:蓝蕨领衔对比五强持久香型
  • 智能体版中科院学术GPT上线内测!AI与科研的深度碰撞 - 实践
  • 双碳时代的能源管理新基建:MyEMS 开源生态如何赋能企业低碳转型
  • AIReview 实战:用 AI 把代码评审提质提速
  • 基于飞思卡尔MCU的血压计源代码实现
  • 2025 年瓷砖厂家最新推荐榜,技术实力与市场口碑深度解析助力消费者精准选购亮光砖/哑光砖/木纹砖/仿古砖/玛缇马毛砖厂家推荐
  • 2025年10月长白山亲子酒店评测榜:松果里领衔对比排行全解析
  • CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程 - 实践
  • 2025年安恒信息公司深度解析:AI与数据安全双轮驱动的领军之路.
  • 闲言碎语
  • 2025年安恒信息深度解析:AI与数据安全双轮驱动的技术演进与风险透视。
  • 从代码到碳表:MyEMS 开源社区版如何支撑中小企业双碳合规?
  • 2025国内开发者首选:Gitee如何成为本土化代码托管标杆
  • 2025 办公家具厂家最新推荐榜:实木 / 现代 / 环保 / 智能 / 定制品类精英盘点,附选购指南
  • 图解Matplotlib和Seaborn入门 - 实践
  • ICPC2024沈阳 游记(VP)
  • 2025年10月工程管理系统对比评测榜:斗栱云领衔十强深度解析分析
  • 2025年10月超声波清洗机厂家推荐榜:十强对比评测与选购指南
  • 2025年10月超声波清洗机厂家推荐榜:十强对比评测与选购全攻略
  • 2025 年电气自动化培训学校推荐 —— 湖北中南高职:专注智能制造人才培养,实力护航职业发展
  • 2025年10月超声波清洗机厂家推荐:十强对比评测榜分析
  • 2025年10月美白精华产品推荐:十强对比评测榜助你精准选品
  • ABC428 AtCoder Beginner Contest 428 游记
  • 2025 年防雷检测机构最新推荐排行榜单:覆盖多领域需求,深度解析优质机构优势助您避雷无忧
  • 2025年10月不锈钢水箱厂家推荐:对比评测榜助力采购高效决策
  • 基于MATLAB的Copula函数实现合集
  • cline使用技巧
  • 2025年10月留香沐浴露推荐:五强对比评测榜助你锁定24小时体香
  • 2025年10月防脱生发产品推荐:十强对比评测榜助您科学选品
  • 2025 年最新光纤传感安防系统厂家推荐排行榜:聚焦管道监测与周界防护领域优质企业管道安全监测干涉型 / 机场围界干涉型 / 周界入侵干涉型 / 周界安防干涉型光纤传感安防系统公司推荐