feat(N34): 阶段3 net层收敛——单一reconciler+忙等统一+镜像降级+E-02收口

实施方案 docs/网络/N34-自愈审计/实施方案.md §5 项1/2/3/5(项4 U15受E6暂缓):

- 3a 合并reconciler:net_listener_pump删除,与net_reconcile_tick合并为
  单一100ms tick;判据读驱动状态缓存(唯一刷新点=net_poll每轮全量刷新,
  E2背书18.1us);去抖分级②=1/③④⑤=2/①=4轮(M3让位窗400ms保留)+冷却1s;
  链路态订阅留痕(F-DRV-13);探针去抖删除(F-MS-9)
- 3b 忙等统一(P2b):listen/connect open重试与close排空循环改
  net_sock_reset_sync(驱动sock_reset:读空RX→CLOSE→排空事件→等
  byte0=00H,内置LISTEN态二段CLOSE补发);close不再读清全局中断寄存器
  (F-NET-7);net_poll每轮步进活跃复位状态机(驱动契约,防搁浅)
- 3c 镜像降级:net_sock_state_t声明为本层会话投影,芯片事实源=驱动缓存
- E-02收口:新API net_drop_conn(拆会话保监听,QUARANTINE语义,幂等;
  模拟器双端实现;timeSync 30s预算耗尽接入;主机单测TC-TS-027d)
  定案:CH395F close无RST,对内核存活不close的对端停FIN_WAIT_2,
  监听恢复受限于对端close(Trap 07补充),兜底=E13 keepalive/TIMEOUT

台架全绿(Code=211348 RW=1104 ZI=154232):@test PASS;[STACK] net
1116/3840;Trap22 :7003 50/50+:21三档各50/50;Trap23 RST10/10+FIN5/5;
Trap25 n30 11/11;E-02双PASS;iec104 18/18;对时跨会话连续;
ftp_regression 11/11;integrity 15/15 SHA;ci_local L0+L0.5全过。
This commit is contained in:
2026-10-13 15:09:58 +08:00
parent 83a70721bd
commit 6394853fef
14 changed files with 558 additions and 348 deletions
+34
View File
@@ -708,6 +708,40 @@ int net_close(int sockfd) {
return 0;
}
/*
* 函数功能:主动拆掉当前 TCP 会话、保留监听(与 MCU 端同名 API——N34 阶段 3,E-02 收口)
* 入口参数:sockfd - socket 描述符
* 出口参数:无
* 返回值:0 成功(含幂等:无活动会话),-1 失败
* 限定条件:socket 已打开(in_use == 1)
* 函数说明:模拟器为多连接后端(conn != 监听 fd):等价关闭该数据连接的
* Winsock 句柄并收口 CLOSED(fd 槽不释放,外层 net_close 收尾);
* 监听 fd 不受影响。无活动会话幂等返 0。
*/
int net_drop_conn(int sockfd) {
if (sockfd < 0 || sockfd >= NET_MAX_SOCKETS) {
s_net_errno = NET_ERR_BADF;
return -1;
}
if (s_socks[sockfd].in_use == 0) {
s_net_errno = NET_ERR_BADF;
return -1;
}
if (s_socks[sockfd].state != NET_SOCK_STATE_ESTABLISHED &&
s_socks[sockfd].state != NET_SOCK_STATE_CONNECTING) {
/* 无活动会话:幂等成功 */
s_net_errno = NET_OK;
return 0;
}
closesocket(s_ws[sockfd]);
s_ws[sockfd] = INVALID_SOCKET;
s_socks[sockfd].state = NET_SOCK_STATE_CLOSED;
s_net_errno = NET_OK;
return 0;
}
/*
* 函数功能:注册事件回调
* 入口参数:sockfd - socket 描述符