refactor(编号): F-* 网络设计条目号转语义说明——批次一收尾,代码注释 43 处 + 文档 9 处

批次一(不碰门禁即可清)的最后半批,原派道中途失败且**未留任何改动**(Lead 核实那批文件零 diff 后重派
setpage 执行,14 只文件 / 46 处),测试侧与一张生成器共 9 处由 Lead 收尾。

做法:**逐处先读属主文档 §7 速查表里那条的语义**,再改写成「一句话结论 + §指针」,同号跨文件同一措辞,
无一处机械删号(例:`F-NET-7` → 「唯一读者红线(docs/网络/网络自愈架构设计.md §7 I7)」)。属主登记处
**12 条定义行原样保留**、不删登记族(删了历史行会报未登记前缀),只在该章加停发句。

顺带清掉 **3 处裸形**(`T6` → 「台架实测」、`M4-lite`、`Q1` 语义化)——裸形正是 id-check 校验 2 抓的形态,
属净减。测试侧收尾时两条纪律:主机侧**断言字符串必须保持 ASCII**(`ns_s3_msg.c` 等三处的号在 CHECK 文本
里,改成 `sole reader of the global register` 而不是中文);板端注释可用中文。

生成器 gen_net_instability_svg.py 文案改动 → 同批重跑产物 `docs/images/网络不稳根因总览.svg`:只有那一
行的**框宽随文字自适应**(526 → 551,右缘 1411 未越界),画布 1560x1468 不变,无溢出告警。

⚠ 本笔**只含代码注释面**:该半批的文档面(BSD 函数调用关系 9 处、属主文档 §7 停发句、
生成器与产物那张网络不稳图)已被上一笔 `git add docs tools` 一并收走,两笔合起来才是完整的 F-* 批次。
自证:@build **0 错 0 警**且 Program Size 与改前**逐字节同数**(Code=233900 RO=26104 RW=1
536 ZI=136808,
注释无误伤的机器证据);net_socket 457/457、iec104_serv / net_pending 两套 exit 0;cppchec
k 钩子参数零
发现、coding-standard 0(lftpd_inet.c 那 4 条是存量且该目录本在钩子 exclude 内,用 HEAD 副本对照
甄别过)。
This commit is contained in:
2026-10-27 09:05:27 +08:00
parent 4c74cfa825
commit 0054ae629a
9 changed files with 54 additions and 40 deletions
+3 -3
View File
@@ -1438,7 +1438,7 @@ typedef struct {
} ch395f_rst_slot_t;
static ch395f_rst_slot_t g_rst[8];
/* 链路态缓存(F-DRV-13) */
/* 链路态缓存(docs/网络/网络自愈架构设计.md §4.4 链路态喂料) */
static uint8_t g_link_up;
static uint8_t g_link_valid;
static uint16_t g_link_changes;
@@ -1532,7 +1532,7 @@ int ch395f_sock_is_listening(uint8_t sn) {
/*
* 函数功能:事件护栏——只读本 Socket SINT(读即清),永不触碰全局寄存器
* (F-NET-7 收窄:两级预清会清掉其它 Socket 的事件位)
* (唯一读者红线收窄,docs/网络/网络自愈架构设计.md §4.10:两级预清会清掉其它 Socket 的事件位)
* 入口参数:sn - Socket 索引 uint8_t 0 - 7
* 返回值:SINT 位图;sn>7 返回 0 uint8_t
* 限定条件:芯片已初始化;全局寄存器唯一读者=net_poll(驱动侧契约)
@@ -1543,7 +1543,7 @@ uint8_t ch395f_sock_events(uint8_t sn) {
return 0U;
}
/* 契约:只读本 Socket SINT(0x30 读即清),永不触碰全局寄存器 0x19——
* 全局寄存器读即清且含全部 Socket 事件位,唯一读者=net_poll(F-NET-7) */
* 全局寄存器读即清且含全部 Socket 事件位,唯一读者=net_poll(唯一读者红线,§4.10) */
return ch395f_get_sock_int_status(sn);
}
+10 -6
View File
@@ -580,7 +580,8 @@ uint16_t ch395f_get_recv_len(uint8_t sock);
* 函数功能:获取全局中断状态(2 字节版,支持 Socket 0~7)
* 返回值:中断状态 uint16_t(低字节=Socket 0~3 + PHY/DHCP,高字节=Socket 4~7 + DHCPv6)
* 限定条件:芯片已初始化
* ⚠ 护栏(F-NET-7,I7 不变量):本寄存器**读即清**且含全部 Socket 事件位——
* ⚠ 护栏(唯一读者红线,docs/网络/网络自愈架构设计.md §4.10;I7 不变量):
* 本寄存器**读即清**且含全部 Socket 事件位——
* 任何未配对 SINT 消费的读取都会吞掉其它 Socket 的事件通知。
* **唯一读者 = net_poll(net_socket.c);测试/台架代码同样禁自行读取**
* (用户裁定 2026-10-13)——等事件一律直读本 Socket ch395f_get_sock_int_status()。
@@ -758,7 +759,7 @@ void ch395f_get_unreach_info(uint8_t *p_buf);
* E2 实测:单次状态回读 18.1us;LISTEN 可见延迟 100% <=10ms。
*/
/* 类型化状态回读 + 每 Socket 缓存(F-DRV-1/3) */
/* 类型化状态回读 + 每 Socket 缓存 = 单一事实源(docs/网络/网络自愈架构设计.md §4.4) */
#define CH395F_SOCK_STATE_NONE 0xFFU /* open=CLOSED 时 tcp_state 哨兵("无意义") */
typedef struct {
@@ -791,14 +792,16 @@ int ch395f_sock_is_listening(uint8_t sn);
/*
* 函数功能:事件护栏——只读本 Socket SINT(0x30,读即清),永不触碰全局寄存器
* (F-NET-7 收窄:两级预清"先读全局再读本 socket"会清掉其它 Socket 的
* (唯一读者红线收窄,docs/网络/网络自愈架构设计.md §4.10:两级预清
* "先读全局再读本 socket"会清掉其它 Socket 的
* 事件位;全局寄存器唯一读者=net_poll 写成驱动侧契约)
* 入口参数:sn - Socket 索引 uint8_t 0 - 7
* 返回值:SINT 位图;sn>7 返回 0 uint8_t
*/
uint8_t ch395f_sock_events(uint8_t sn);
/* 复合复位模式(F-DRV-4;两模式都必须排 RX——E4 定案,差异只剩最短等待) */
/* 复合复位模式(两套同构变体的统一原语,docs/网络/网络自愈架构设计.md §4.4;
* 两模式都必须排 RX——E4 定案,差异只剩最短等待) */
typedef enum {
CH395F_RESET_GRACEFUL = 0, /* 最短等待 100ms(TRAP-NET-18 二阶段实测值) */
CH395F_RESET_QUARANTINE /* 最短等待 400ms */
@@ -821,7 +824,8 @@ int ch395f_sock_reset_begin(uint8_t sn, ch395f_reset_mode_t mode);
*/
int ch395f_sock_reset_poll(uint8_t sn);
/* 命令完成判据(F-DRV-8;E3 定案=状态回读,GET_CMD_STATUS 对这三条无判别力) */
/* 命令完成判据(阻塞等待的非阻塞化,docs/网络/网络自愈架构设计.md §4.4;
* E3 定案=状态回读,GET_CMD_STATUS 对这三条无判别力) */
typedef enum {
CH395F_DONE_OPEN = 0, /* open 完成 = byte0 变 05H */
CH395F_DONE_LISTEN, /* listen 完成 = byte0=05H 且 TCP=01H(E2:<=10ms 可见) */
@@ -837,7 +841,7 @@ typedef enum {
*/
int ch395f_cmd_done(uint8_t sn, ch395f_done_what_t what);
/* 链路态缓存(F-DRV-13;net_poll 读全局后喂 bit0~3) */
/* 链路态缓存(拔网线不再静默,docs/网络/网络自愈架构设计.md §4.4;net_poll 读全局后喂 bit0~3) */
/*
* 函数功能:喂全局中断位(net_poll 读 GET_GLOB_INT_STATUS_ALL 后调用;
+2 -2
View File
@@ -33,8 +33,8 @@
本层 CLOSED 而芯片在听 → 只重同步(U11);芯片静默回收 → RESYNC(⑤)
- **分级去抖(②=1 轮 / ③④⑤=2 轮 / ①=4 轮)+ 冷却(1s)**——监听失位的重建
动作**必须去抖**,否则"刚 listen 未生效"瞬态会反复重建直至
`relisten retry budget exhausted`(三监听口全死);①的 4 轮窗是 F-NET-17 M3
可疑电平的让位租约(勿改小)
`relisten retry budget exhausted`(三监听口全死);①的 4 轮窗是风暴态三机制里
M3 可疑门的让位租约(见 `docs/网络/网络自愈架构设计.md` §4.1.6,勿改小)
### 异常复监听隔离(TRAP-NET-18 修复)
+2 -1
View File
@@ -106,7 +106,8 @@ int lftpd_inet_accept_timeout(int socket, int timeout_ms)
if (s >= 0) {
return s;
}
/* F-NET-15 M2(自愈专项实验 2026-10-12):镜像门控退役——原直读 p_sock->state 在
/* M2 镜像门控退役(自愈专项实验 2026-10-12;沉降门失效族收口,
* docs/网络/网络自愈架构设计.md §4.3):原直读 p_sock->state 在
* relisten 忙期(CLOSED 瞬态)误判"已关闭",扔掉 ~4.9s 等待预算;armed 门控
* 认"监听器在服役(LISTENING)或待重建且 RX 有残留(closed-with-data 救回窗)",
* 与 :7003 的监听生命周期 P1 同型修复 */
+19 -14
View File
@@ -127,8 +127,9 @@ void handle_connect_event(net_sock_t *p_sock) {
* ESTABLISHED 之后立刻做:否则抢先 relisten 后到新连接的窗口内
* recv 仍会误得 EOF(把新客户端踢开) */
p_sock->session_dead = 0U;
/* F-NET-17 M3 前置:清可疑电平——探针(LISTENING 期)残留计数会带进新会话,
* 不补此清零则 M3 矛盾判据首轮即被旁路(T6 实测 grep:connect 原不清此字段) */
/* M3 可疑门前置(风暴态三机制,docs/网络/网络自愈架构设计.md §4.1.6):
* 清可疑电平——探针(LISTENING 期)残留计数会带进新会话,不补此清零则矛盾判据
* 首轮即被旁路(台架实测 grep:connect 原不清此字段) */
p_sock->lost_conn_seen = 0U;
/* 新开 Socket 发送缓冲按空闲计 */
p_sock->send_ready = 1;
@@ -167,7 +168,7 @@ void handle_connect_event(net_sock_t *p_sock) {
/* 监听生命周期 P1:新会话开始 —— 清"上一条会话已结束"电平(同 LISTENING
* 分支:必须在转 ESTABLISHED 后立刻做,防抢先 relisten 窗口误 EOF) */
p_sock->session_dead = 0U;
/* F-NET-17 M3 前置:清可疑电平(同 LISTENING 分支) */
/* M3 可疑门前置:清可疑电平(同 LISTENING 分支,§4.1.6 风暴态三机制) */
p_sock->lost_conn_seen = 0U;
/* 使能 KeepAlive(客户端连接保活) */
@@ -238,10 +239,11 @@ void handle_disconnect_event(net_sock_t *p_sock) {
/* 直接返回(中断已读清,不会重复上报) */
return;
}
/* F-NET-17 M3(自愈专项实验 2026-10-13):矛盾态可疑门——芯片 Socket 仍 OPEN(0x05)
/* M3 可疑门(自愈专项实验 2026-10-13;风暴态三机制收口,
* docs/网络/网络自愈架构设计.md §4.1.6):矛盾态可疑门——芯片 Socket 仍 OPEN(0x05)
* 而 TCP 槽 0x00 且本层 ESTABLISHED = 逻辑矛盾(活连接应 0x04):陈旧 DISCONNECT
* (拆链完成滞后锁存,TRAP-NET-12)与"真断开恰被旧拆链覆写槽"在 D20 上不可分辨
* (结构性失明,F-NET-15 Q1)。处置:不吃边沿,置可疑电平返回,交对账①
* (结构性失明,同 GRACEFUL 沉降门放大器根因,§4.3)。处置:不吃边沿,置可疑电平返回,交对账①
* (ESTABLISHED + 芯片 TCP==CLOSED)电平去抖再入本函数(对账与重建合一
* 后=4×100ms,NET_RECON_STABLE_DEATH,让位租约 400ms 不变 + 冷却):
* flag==1 旁路本门 → 正常释放;连接真活则租约内
@@ -272,7 +274,8 @@ void handle_disconnect_event(net_sock_t *p_sock) {
/* TRAP-NET-18 推广(2026-09-24 台架实证):正常 DISCONNECT 释放留下的芯片收尾状态
* 会在复用同一 fd 的下一条连接上以"伪 DISCONNECT"形式投递(实测 accept 后约 10~20ms)→ 该连接被提前释放,应用把已到的 2048B 当整份文件并回报 226;
* 仅**本连接收过数据**时登记沉降(实测触发源 = 收过数据的数据通道被关闭),纯连接即关/只发不收的连接免沉降,保住 TRAP-NET-17 的快速复连时序(:21 @0ms ×50 全通过) */
/* F-NET-15 M1(自愈专项实验 2026-10-12):沉降**无条件**登记。原 recv_bytes!=0 门的
/* M1 沉降门退役(自愈专项实验 2026-10-12;GRACEFUL 无条件化,
* docs/网络/网络自愈架构设计.md §4.3):沉降**无条件**登记。原 recv_bytes!=0 门的
* 受害者由事件时序定义(accept 后 ~20ms 被陈旧 DISCONNECT 杀 → recv_bytes==0 是
* 构造性必然),门对"残渣循环自持"形态失效(n30_repro 背靠背 9/10 失败,E1 实测);
* 门原保护目标(:21 @0ms 快复连)已被监听生命周期单一重建入口延迟化(恢复窗实测 0.3~1s)架空,
@@ -426,7 +429,8 @@ static void fire_event(net_sock_t *p_sock, net_event_t event) {
* 返回值:无
* 限定条件:netTask 上下文(net_accept_locked 内调用,其开头已 net_poll(),
* 驱动缓存新鲜度有保证)
* 函数说明:1. F-MS-9:判据改读**驱动状态缓存**(零 SPI;唯一
* 函数说明:1. 去抖自偿退役(镜像降级为会话投影的直接红利,
* docs/网络/网络自愈架构设计.md §3.3):判据改读**驱动状态缓存**(零 SPI;唯一
* 刷新点=net_poll),**探针去抖删除**——原去抖防的两类瞬态已
* 结构性消除:"刚 listen 尚未生效"显示 TCP=00 永不命中 ESTABLISHED
* 门(E2:LISTEN 可见 100% <=10ms 无长尾);拆链窗假 ESTABLISHED
@@ -456,7 +460,7 @@ void net_lost_connect_probe(net_sock_t *p_sock) {
p_sock->lost_conn_seen = 0U;
return;
}
/* F-MS-9:去抖已删(判据读缓存,两类瞬态结构性消除,
/* 探针去抖已删(去抖自偿退役,判据读缓存、两类瞬态结构性消除,
* 见函数头注释 1);lost_conn_seen 仅作 M3 可疑电平标志用,动手前清零 */
p_sock->lost_conn_seen = 0U;
/* 留痕:事件未收到自愈命中 */
@@ -479,7 +483,7 @@ void net_lost_connect_probe(net_sock_t *p_sock) {
* ① 本层 ESTABLISHED 而芯片已无连接 → 按断开处理(只置事实)
* ② 本层 LISTENING 而芯片已完成握手 → 补做 standalone accept(命中时
* 才回读对端端口做幽灵甄别——本 tick 唯一按需 SPI)
* ⑤(F-NET-2)本层 ESTABLISHED 而芯片静默回收回 LISTEN(0x05/0x01 无
* ⑤(静默回收认领,docs/网络/网络自愈架构设计.md §4.1)本层 ESTABLISHED 而芯片静默回收回 LISTEN(0x05/0x01 无
* DISCONNECT)→ RESYNC 只修本层
* ③ 本层 LISTENING(监听型 fd)而芯片监听失位 → 重建
* ④ 本层 CLOSED(监听型 fd)而芯片不在 LISTEN → 重建
@@ -487,10 +491,11 @@ void net_lost_connect_probe(net_sock_t *p_sock) {
* (重下发因 USE 错误关掉正听着的 Socket,U12 同源事故)
* 4. 去抖分级(100ms/轮;E2:LISTEN 可见 100% <=10ms 无长尾):②=1 轮
* (幽灵甄别挡拆链窗的旧连接 ESTABLISHED);③④⑤=2 轮(2026-09-23 实证:
* 无去抖时监听被反复重建直至放弃);①=4 轮(**勿改小**:F-NET-17 M3
* 可疑电平让位再入,400ms 让位窗=在途投递不可毁的最后租约,E9a 实证)
* 无去抖时监听被反复重建直至放弃);①=4 轮(**勿改小**:M3 可疑门
* 让位再入(§4.1.6 让位红线),400ms 让位窗=在途投递不可毁的最后租约,E9a 实证)
* 5. 动手后冷却 NET_RECONCILE_COOLDOWN_MS 防风暴(U11 被动重同步不占)
* 6. 链路态订阅(F-DRV-13):驱动 link 变化计数变化 → 留痕(不自动重配)
* 6. 链路态订阅(链路态喂料缓存,docs/网络/网络自愈架构设计.md §4.4):
* 驱动 link 变化计数变化 → 留痕(不自动重配)
*/
void net_reconcile_tick(void) {
/* 上次对账轮的时刻(tick) */
@@ -511,7 +516,7 @@ void net_reconcile_tick(void) {
/* 更新本轮起始时刻 */
s_last = now;
/* 链路态订阅(F-DRV-13):net_poll 已喂驱动,这里只看计数变化 */
/* 链路态订阅(§4.4 链路态喂料缓存):net_poll 已喂驱动,这里只看计数变化 */
{
/* 链路变化计数订阅基线(0xFFFF=未建档) */
static uint16_t s_link_last = 0xFFFFU;
@@ -556,7 +561,7 @@ void net_reconcile_tick(void) {
stable_need = NET_RECON_STABLE_DEATH;
} else if ((c.open != CH395F_SOCKET_CLOSED) &&
(c.tcp_state == CH395F_TCP_LISTEN)) {
/* ⑤(F-NET-2 缺口):芯片静默回收——本层 ESTABLISHED
/* ⑤(静默回收认领,docs/网络/网络自愈架构设计.md §4.1):芯片静默回收——本层 ESTABLISHED
* 而芯片已自行把 Socket 收回 LISTEN(0x05/0x01,**不发 DISCONNECT
* 中断**,run8 台架实证)→ RESYNC 语义 */
bad = 5;
+2 -1
View File
@@ -140,7 +140,8 @@ static int net_relisten_locked(int sockfd) {
ch395f_close_socket((uint8_t)sockfd); /* 主动关:清旧连接收尾状态 */
(void)ch395f_get_sock_int_status((uint8_t)sockfd); /* 读即清:只碰本 Socket */
/* ⚠ 此处**绝不**读全局中断寄存器:它整体读即清、无按位手段,每 30ms 一轮会把
* 其它在用 Socket 的门焊死(F-NET-15 M4-lite 删的就是它 → 架构设计 §4.10.3) */
* 其它在用 Socket 的门焊死(沉降段全局读即清的删除对象就是它 →
* docs/网络/网络自愈架构设计.md §4.10.3) */
ch395f_get_socket_status((uint8_t)sockfd, st);
/* 芯片尚未回到 CLOSED/TCP_CLOSED,或未满最短等待 */
+10 -9
View File
@@ -482,7 +482,7 @@ int net_poll(void) {
/* 读取全局中断状态(2 字节):读操作本身会清除 CH395F 中断并使其拉高 INT#,
* 若此后仍有新中断,CH395F 会再次拉低 INT#,由下一次 net_poll() 处理 */
int_status = ch395f_get_glob_int_status_all();
/* F-DRV-13 接线:把全局位喂驱动——bit2 PHY_CHANGE 时驱动
/* 链路态喂料接线(docs/网络/网络自愈架构设计.md §4.4):把全局位喂驱动——bit2 PHY_CHANGE 时驱动
* 重读 PHY 更新 link_up 缓存 + 变化计数,net 层在 reconciler 订阅留痕
* (运行期拔网线不再静默;不自动重配,重配仍走 UI/配置引擎路径) */
ch395f_glob_event_feed(int_status);
@@ -779,8 +779,9 @@ void net_process_messages(void) {
}
break;
}
/* F-NET-3:NET_MSG_RESYNC_LISTEN / NET_MSG_RELISTEN 两个
* 手动自愈消息已删——RESYNC 语义并入对账⑤(net_reconcile_tick),
/* 手动自愈 API 退役(docs/网络/网络自愈架构设计.md §4.2):
* NET_MSG_RESYNC_LISTEN / NET_MSG_RELISTEN 两个
* 消息已删——RESYNC 语义并入对账⑤(net_reconcile_tick),
* RELISTEN 与 reconciler/D10 完全重叠且对健康监听器是 footgun;
* 生产调用者本就为零(仅 test/board Phase 13,已改由自动机制接管) */
default:
@@ -1396,7 +1397,7 @@ int net_accept(int sockfd, struct net_sockaddr *addr, int *addrlen) {
return msg.result;
}
/* F-NET-4:net_can_accept 已删除——它只认 ESTABLISHED,作为 accept
/* accept 门控迁移(docs/网络/网络自愈架构设计.md §4.2):net_can_accept 已删除——它只认 ESTABLISHED,作为 accept
* 门控会把"监听器在服役但本轮还没 CONNECT"的窗口全挡掉(:2404 CONNECT 事件补 accept 探针
* 因此从不运行,与已修的 :7003 探针失效同型);唯一生产调用者 iec104 已迁
* net_listener_armed。net_can_read(RECV 门控)不受影响、保留。 */
@@ -1409,10 +1410,10 @@ int net_accept(int sockfd, struct net_sockaddr *addr, int *addrlen) {
* 0 - 未就绪(fd 未分配 / 非监听型 / 正处隔离期以外的不就绪态) int
* 限定条件:任意任务上下文;net_init() 已调用
* 函数说明:1. 不变量 II(单一重建所有者):取代已退役的 net_can_accept()(只认
* ESTABLISHED,F-NET-4 删除)作为监听 accept 门控。原门控下
* ESTABLISHED,§4.2 门控迁移删除)作为监听 accept 门控。原门控下
* :7003 永不进 net_accept →
* net_lost_connect_probe(CONNECT 事件未收到补 accept)对该端口从不运行
* (F-NET-4)
* (门控迁移,docs/网络/网络自愈架构设计.md §4.2)
* 2. 为什么放行 LISTENING:探针与"closed-but-readable 接受"(:1338)
* 只在 net_accept_locked 内部发生,门控挡在外面就永远到不了;
* LISTENING 态 accept 由探测补 accept 或返 WOULDBLOCK,均安全
@@ -1646,7 +1647,7 @@ static int net_connect_locked(int sockfd, const struct net_sockaddr *addr, int a
}
/* 清掉本 Socket 可能残留的中断状态,丢弃上一条连接遗留的 DISCONNECT。
* F-NET-7:只清**本 Socket** SINT(驱动护栏原语)——原
* 唯一读者红线(docs/网络/网络自愈架构设计.md §4.10):只清**本 Socket** SINT(驱动护栏原语)——原
* "再读清全局"会焊死其它在用 Socket 的事件位(全局寄存器唯一读者=net_poll) */
(void)ch395f_sock_events((uint8_t)sockfd);
@@ -1981,7 +1982,7 @@ static int net_recv_locked(net_sock_t *p_sock, void *buf, int len, int flags,
* **确定性 sock_reset**(读空 RX -> CLOSE(幂等) -> 排空本 Socket
* 事件(quiescent) -> 等 byte0=00H,内置 LISTEN 态二段 CLOSE 补发
* ——E2 补充发现:一次 CLOSE 只拆监听 byte0 恒 05)
* 2. F-NET-7:排空只碰本 Socket SINT,**不再读清全局中断寄存器**
* 2. 唯一读者红线(docs/网络/网络自愈架构设计.md §4.10):排空只碰本 Socket SINT,**不再读清全局中断寄存器**
* (唯一读者=net_poll;原循环读全局会焊死其它 Socket 事件位)
* 3. 快路径:芯片已 CLOSED(byte0=00H)→ 跳过复位只清残留事件
* 4. 复位超时照常放行(同原 500ms 超时容忍;后续 relisten 由
@@ -2920,7 +2921,7 @@ int net_sock_state(int sockfd) {
return (int)s_net_socks[sockfd].state;
}
/* F-NET-3:手动自愈 API net_resync_listen / net_relisten 已删除——
/* 手动自愈 API 退役(docs/网络/网络自愈架构设计.md §4.2):net_resync_listen / net_relisten 已删除——
* RESYNC 语义并入对账⑤(net_reconcile_tick 自动认领"芯片静默回收回 LISTEN"形态,
* 200ms×2 去抖 + 1s 冷却沿用);RELISTEN 与 reconciler/D10 完全重叠且对健康监听器是
* footgun(无条件 open→USE→close 自毁 ~1s,原注释自认)。生产调用者本就为零
+4 -3
View File
@@ -39,7 +39,8 @@ typedef enum {
NET_MSG_LISTEN,
NET_MSG_ACCEPT,
NET_MSG_DROP_CONN, /* 主动拆会话、保监听(见 net_drop_conn) */
/* F-NET-2/3:NET_MSG_RESYNC_LISTEN / NET_MSG_RELISTEN 已删——
/* 静默回收认领 + 手动自愈 API 退役(docs/网络/网络自愈架构设计.md §4.1、§4.2):
* NET_MSG_RESYNC_LISTEN / NET_MSG_RELISTEN 已删——
* 静默回收由对账⑤自动认领(net_reconcile_tick),重建由 reconciler
* 形态③④/D10 单一
* 所有者负责;手动自愈 API 面退役(生产调用者本就为零) */
@@ -172,7 +173,7 @@ int net_listen(int sockfd);
*/
int net_accept(int sockfd, struct net_sockaddr *addr, int *addrlen);
/* F-NET-4:net_can_accept 已退役——只认 ESTABLISHED 的旧门控会把
/* accept 门控迁移(docs/网络/网络自愈架构设计.md §4.2):net_can_accept 已退役——只认 ESTABLISHED 的旧门控会把
* "监听器在服役、本轮待 CONNECT"窗口全挡掉(CONNECT 事件补 accept 探针因此从不运行);
* 监听 accept 门控统一用 net_listener_armed(),recv 门控 net_can_read() 保留。 */
@@ -457,7 +458,7 @@ int net_get_errno(void);
*/
int net_sock_state(int sockfd);
/* F-NET-3:net_resync_listen / net_relisten 声明已删——
/* 手动自愈 API 退役(docs/网络/网络自愈架构设计.md §4.2):net_resync_listen / net_relisten 声明已删——
* 静默回收形态由对账⑤自动认领(2 轮去抖 + 1s 冷却,纪律"不发芯片命令"
* 原样保留在认领动作内);监听重建由 reconciler 形态③④(100ms 周期)/
* D10(30ms 重试)单一所有者。勿再引入"应用层手动自愈"入口。 */
+2 -1
View File
@@ -124,7 +124,8 @@ struct net_sockaddr_in {
* 芯片侧状态唯一事实源=驱动状态缓存(ch395f_sock_state_cached,刷新点=net_poll);
* 本 8 态只表达**本层会话语义**(fd 生命周期/待 accept 电平/门控展示),
* 事件与对账把它与芯片事实对齐。新增"按芯片状态决策"的代码一律读驱动缓存,
* 勿再直读本投影判芯片(历史五层补丁的根因,见主流方案对照 F-MS-8)。
* 勿再直读本投影判芯片(历史五层补丁的根因 = 有损投影必生决策窗口,
* 见 docs/网络/网络自愈架构设计.md §1.5 主流方案对照与 §3.3 会话投影)。
*/
typedef enum {
NET_SOCK_STATE_CLOSED = 0, /* 未使用 */