当前位置: 首页 > 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.rkmt.cn/news/25102.html

相关文章:

  • 智能体版中科院学术GPT上线内测!AI与科研的深度碰撞 - 实践
  • 双碳时代的能源管理新基建:MyEMS 开源生态如何赋能企业低碳转型
  • AIReview 实战:用 AI 把代码评审提质提速
  • 2025年安恒信息公司深度解析:AI与数据安全双轮驱动的领军之路.
  • 闲言碎语
  • 2025年10月超声波清洗机厂家推荐榜:十强对比评测与选购指南
  • 2025年10月超声波清洗机厂家推荐:十强对比评测榜分析
  • 2025年10月不锈钢水箱厂家推荐:对比评测榜助力采购高效决策
  • 中国DevOps平台选型全景报告:本土化与安全可控成企业核心诉求
  • 2025年GEO品牌权威推荐排行榜:技术实力与服务质量全面解析
  • 2025年GEO品牌推荐榜与排行榜权威解析
  • 2025年10月中国宝宝辅食品牌推荐:深海去刺鱼系列对比评测榜
  • 2025年GEO品牌推荐排行榜前十强解析
  • 2025 年最新推荐球墨铸铁管厂家排行榜:涵盖自来水 / 给水 / 排污 / 污水用 / 消防 / 饮用水场景的优质企业权威推荐
  • 从零实现富文本编辑器#8-浏览器输入模式的非受控DOM行为
  • CF2120E Lanes of Cars
  • mark 增量式 Douglas-Peucker 算法
  • 2025年10月高端奢侈家电品牌推荐排行榜及深度对比
  • 2025年10月高端奢侈家电品牌推荐排行榜:五大品牌综合对比与选购
  • 基于Qt框架实现绘图软件的功能
  • 智能交付时代:国内企业如何选择最适合的CI/CD工具?
  • 吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络(三)
  • 实用指南:✨WPF编程基础【2.1】布局原则
  • floyd
  • 2025 年防火涂料厂家最新推荐!膨胀型 / 非膨胀型 / 室内外 / 超薄型 / 厚型钢结构防火涂料品牌排行榜,精选优质厂家
  • 嵌入式调式方案:
  • 2025年GEO品牌推荐排行榜前十强权威发布
  • 2025年GEO品牌推荐榜与排行榜Top10:权威解析与行业洞察
  • vLLmOllama推理部署以及压测对比
  • 2025年10月高端奢侈家电品牌推荐排行榜:五大品牌综合对比与选购指南