refactor(NET): 事件处理与周期对账抽出 net_events.c,net_socket.c 3720→3119

动机:net_socket.c 3720 行(注释 1878 / 代码 1518 / 54 函数),BSD 连接层
与"状态面收敛"两套职责混在一个文件里。16 个消费者只依赖 net_socket.h,
故搬移对应用层零波及;模拟器另有 net_socket_sim.c,新模块走 SIM_EXEMPT。

为什么是一个模块而不是两个:实测对账区真实调用事件处理器 2 处(形态② 补
accept 走 handle_connect_event),且 NET_RECON_STABLE_DEATH 两边共用——
拆成 net_events.c + net_reconcile.c 会造出跨模块调用,合起来则跨模块导出
为零。二者同属"芯片状态面与本层镜像的收敛"一个职责。

搬出:5 个 handle_*_event + fire_event + net_reconcile_tick +
net_lost_connect_probe + NET_RECONCILE_*/NET_RECON_STABLE_* 常量 +
net_bench_cmd_log(含其 2 个 static)。

搬移时 4 处 fd 取法替换(其余代码逐行未改,已用剥注释后的代码行多重集
证明差异恰好等于声明的改动集):
- p_sock - s_net_socks → p_sock->ch395_sock(net_socket() 里
  ch395_sock = sockfd,恒等;模拟器同构造)
- 对账循环 &s_net_socks[i] → net_sock_raw(i)

⚠ 随之收窄两处沉降登记的范围门 (qfd >= 0) && (qfd < MAX) → qfd < MAX:
ch395_sock 是 uint8_t,(int) 后恒非负,下界在类型上不可能越界;留着会被
cppcheck 判 knownConditionTrueFalse 拦提交。已在文件头写"勿加回"。

新增 net_sock_raw():对账必须看到 in_use==0 / state==CLOSED 的槽位
(形态④ 认领孤儿监听正依赖 CLOSED 态),而 net_get_sock() 对未在用槽位返
回 NULL 会漏掉这一类。声明放 net_socket.h 而非内部头 net_events.h——规范
S17 2.2 要求非 static 函数声明在配对头文件(同 net_set_errno 先例)。

验证:
- 代码行多重集差异 = 声明的改动集,无一处意外
- @build BUILD_OK 0 错 0 警;Code 212316→212296(−20 B,拆 TU 布局差),
  RO/RW/ZI 完全不变
- cppcheck / coding-standard / registration-check 全 PASS
- @test 硬件闭环 PASS:635ms 到 net init: OK,:8888/:2404/FTP 均建立,
  [ERR]/Fault/relisten/reconcile 命中 0 条
- 台账随 Code 变化同步(ram_baseline --write / check_mem_numbers --write)

遗留(与仍未提交的文档工作同文件,另提):BSD_Socket_API 使用指南的文件
职责表、net_listener.c/.h 文件头"见 net_socket.c"、自愈架构设计 §11 仍把
net_reconcile_tick 记在 net_socket.c——doc-links 只校验 § 编号存在性,
照不出"函数在哪个文件",需在文档提交中一并修正。
This commit is contained in:
2026-10-14 18:04:57 +08:00
parent 0edbfaf08b
commit 63cf73b4d0
9 changed files with 745 additions and 619 deletions
+12
View File
@@ -485,6 +485,18 @@ void net_process_messages(void);
*/
net_sock_t *net_get_sock(int sockfd);
/*
* 函数功能:直取 Socket 控制块数组元素,**不判 in_use**(net 层内部周期对账专用)
* 入口参数:sockfd - Socket 描述符 (0~7),调用方保证在范围内
* 返回值:控制块指针(永不为 NULL)
* 限定条件:netTask 上下文
* 函数说明:`net_get_sock()` 对未在用槽位返回 NULL,而周期对账必须看到 in_use==0 /
* state==CLOSED 的槽位(对账形态④ 认领孤儿监听正依赖 CLOSED 态)→ 单独提供。
* ⚠ 应用层请一律用 `net_get_sock()`;本函数仅供 net_events.c 的对账循环使用。
* 模拟器不实现(无调用者,链接期不需要)。
*/
net_sock_t *net_sock_raw(int sockfd);
/*
* 函数功能:记录**本任务**最后一次失败的精确错误码(net 层内部通用工具)
* 入口参数:err - 错误码(NET_ERR_xxx,负值)