Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(6)

devtools/2025/3/4 21:14:41/

详解(6)


初始化监听套接字数组(listening

    n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10;if (ngx_array_init(&cycle->listening, pool, n, sizeof(ngx_listening_t))!= NGX_OK){ngx_destroy_pool(pool);return NULL;}ngx_memzero(cycle->listening.elts, n * sizeof(ngx_listening_t));

1 确定监听数组初始容量

n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10;

根据旧周期(old_cycle)的监听套接字数量设置新周期的初始容量 n
若旧周期无监听套接字,则默认预分配 10 个元素。

  • old_cycle->listening.nelts 是旧周期监听数组的元素数量。
  • 若存在旧监听套接字,继承其数量;否则使用默认值 10。

监听数组(listening)存储 Nginx 监听的端口和套接字信息(如 listen 80;)。在平滑重启时需继承旧配置,避免重新绑定端口。


2 初始化监听数组

if (ngx_array_init(&cycle->listening, pool, n, sizeof(ngx_listening_t)) != NGX_OK)

初始化动态数组 cycle->listening,用于存储监听套接字信息。

  • pool:内存池,用于管理数组内存。
  • n:初始容量(继承旧值或默认 10)。
  • sizeof(ngx_listening_t):每个元素的大小(监听套接字结构体)。

3 错误处理

{ngx_destroy_pool(pool);return NULL;
}

若数组初始化失败,销毁内存池并终止函数。


4 初始化内存

ngx_memzero(cycle->listening.elts, n * sizeof(ngx_listening_t));

将监听数组的前 n 个元素清零。

ngx_memzeromemset 的封装,确保内存初始化为 0。

动态数组分配的内存可能包含脏数据,直接使用可能导致未定义行为(如误判套接字状态)。



http://www.ppmy.cn/devtools/164558.html

相关文章

Git GitHub基础

git是什么? Git是一个分布式版本控制系统,用于管理源代码的变更。它允许多个开发者在同一个项目上协作,同时跟踪每个修改的历史记录。 关键词: 分布式版本控制软件 软件 安装到我们电脑上的一个工具 版本控制 例如论文&…

【easy视频 | day03】客户端获取视频分类 + 上传投稿

文章目录 前言回顾完成任务1. 客户端获取视频分类2. 上传视频(投稿)2.1 预上传2.2 视频分片上传2.3 删除已上传到临时目录的视频2.4 上传图片2.5 上传视频 总结 前言 本项目非原创,我只是个小小白,跟随 b 站脚步,找到…

JavaWeb后端基础(4)

这一篇就开始是做一个项目了,在项目里学习,我主要记录在学习过程中遇到的问题,以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。 GET : 查询 …

江协科技/江科大-51单片机入门教程——P[3-1] 独立按键控制LED亮灭

本文围绕51单片机开发中的独立按键控制技术展开,系统讲解其硬件结构、电平检测原理与C51编程实现方法。文章从开发板独立按键的物理构造与电路连接入手,剖析按键按下与松开时的电平变化规律,并结合单片机I/O口寄存器操作原理,阐释…

【Elasticsearch】Data Streams

Elasticsearch 的Data Streams是一种用于高效管理和存储时间序列数据(如日志、事件、指标等)的机制。它通过将数据分散到多个后端索引中,同时提供一个统一的接口,使得用户可以像操作单个索引一样操作整个数据流。以下是关于 Data …

第七章:项目实战 - 第三节 - Tailwind CSS 电商网站开发

本节将介绍如何使用 Tailwind CSS 开发一个现代化的电商网站,包括商品展示、购物车、结算流程等核心功能的实现。 商品列表 商品卡片组件 // components/ProductCard.tsx interface ProductCardProps {product: {id: string;title: string;price: number;image: …

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火,试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下,在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库,实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

不用写代码,批量下载今日头条文章导出excel和pdf

前几天有人问我怎么批量抓取今日头条某个号的所有文章数据,需要文章链接,标题和时间,但是不会写代码,于是我写了个简单的教程 这里以渤海小吏为例 首先用edge浏览器安装web-scraper浏览器扩展 然后打开浏览器控制台,找…