refactor(net): N-32 §10 监听生命周期抽为 net_listener.c(纯搬移)
把监听生命周期从 net_socket.c 整体抽出为真机专属模块 net_listener.c: 7 个函数 + 7 个状态数组 + 8 个常量 ≈470 行。 net_socket.c 4126 → 3656 行(-471)。 模块边界(详见 net_listener.h 头注释): - 搬入:relisten_locked / try / clear / done / retry_tick / pump / drain_chip_rx - 留在 net_socket.c:net_listen_locked(应用 API 路径)/ net_accept_locked (产出连接)/ net_lost_connect_probe(补 accept)/ net_listener_armed (双端公开 API)/ net_resync_listen / net_reconcile_tick / net_sock_t 字段 接口从「8 处散点直调 + 2 处直接写状态数组」收敛为 4 个窄接口: net_listener_settle(fd, level) / _try(fd) / _clear(fd) / _retry_tick() 新模块**不访问 s_net_socks**(改用 net_get_sock + ch395_sock)。 搬移中必要的两处可见性提升(非纯机械搬移,已注释留痕): - net_set_errno 由 static 提升为模块间可见(NET_ERR_RETURN_1 宏随迁头文件) - 新增 net_pending_active(fd),替代直接读 s_net_pending[i].active (L3 保险语义原样保留) 真机专属:net_listener.c 依赖 ch395f_* SPI 驱动,sim(Winsock)无对应 → 只注册 Keil 端,并在 check_registration.py 的 SIM_EXEMPT **显式点名** (不整目录一刀切,遵脚本既定原则)。 验证(纯搬移的可证判据): - 尺寸:**RW-data 980 与 ZI-data 143060 完全不变**(数据总量不变); Code 197236→197228(-8)、RO-data 17012→17000(-12)——接口改造的 极小开销,相对 471 行搬移可忽略 - 门禁全绿(cppcheck / C 规范 / 双端注册 / 主机侧单测 12 套 / mem-numbers) - @test PASS + 回读 No difference found - 全量回归::21 0ms×50 与 100ms×50 各 50/50;:8888 20/20;:7003 10/10; ftp_regression 11/11;Trap23 abort/graceful 各 5/5 - 设备侧:orphan listener **0**(保持 P2a 基线)、pump 留痕正常
This commit is contained in:
@@ -435,6 +435,34 @@ void net_process_messages(void);
|
||||
*/
|
||||
net_sock_t *net_get_sock(int sockfd);
|
||||
|
||||
/*
|
||||
* 函数功能:记录**本任务**最后一次失败的精确错误码(net 层内部通用工具)
|
||||
* 入口参数:err - 错误码(NET_ERR_xxx,负值)
|
||||
* 出口参数:无
|
||||
* 返回值:err 原值(便于写成 `return net_set_errno(NET_ERR_XXX);`)
|
||||
* 限定条件:无
|
||||
* 函数说明:1. 只写本任务的槽位,其他任务读不到、也改不了 → 消除跨任务覆写竞态
|
||||
* 2. N-32 §10 模块化:由 net_socket.c 的 static 提升为**模块间可见**,
|
||||
* 供 net_listener.c 等同目录内部模块复用(定义仍在 net_socket.c)
|
||||
*/
|
||||
int net_set_errno(int err);
|
||||
|
||||
/* 「记本任务错误码 + 统一失败返回 -1」的紧凑写法(取代 `s_net_errno = X; return -1;`)
|
||||
* N-32 §10:原定义在 net_socket.c,随 net_set_errno 一并提升到本头文件 */
|
||||
#define NET_ERR_RETURN_1(err) (net_set_errno(err), -1)
|
||||
|
||||
/*
|
||||
* 函数功能:查询本 fd 是否有在途挂起 recv(L3 pending)—— 供 net_listener.c 消费
|
||||
* 入口参数:sockfd - Socket 描述符 (0~7) int
|
||||
* 出口参数:无
|
||||
* 返回值:1 - 有挂起;0 - 无(含描述符越界) int
|
||||
* 限定条件:任意上下文(纯 RAM 读,不发起 RPC)
|
||||
* 函数说明:1. N-32 §10 模块化:net_listener_retry_tick 用它跳过"重开 Socket
|
||||
* 会摧毁在途连接"的 fd(L3 保险,原为直接读 s_net_pending[i].active)
|
||||
* 2. 定义在 net_socket.c(配对头即本文件)
|
||||
*/
|
||||
int net_pending_active(int sockfd);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 Socket 本地地址(IP + Port)
|
||||
* 入口参数:sockfd - socket 描述符
|
||||
|
||||
Reference in New Issue
Block a user