docs(网络): 自愈架构 §4.1 形态详解 / §4.10 读即清审计 / §1.5 横向对照
四块内容,都是"把已经做完的事写进文档",无新增设计。
1. §4.1 形态表扩成 6 小节:两个所有者 / 四个词 / 形态表(补"芯片命令"列与
U11 独立行)/ 每个形态为什么长这样、怎么验的 / 为什么 ①③⑤ 常态 0 命中 /
M3 可疑门与沿革。
⚠ 修一处文档 bug:原 ④ 行实际描述的是 U11,真正的 ④ 没有行。已补 U11
独立行,并在 ⚠ 注记里记录这次更正及其 U12 后果。
2. §4.10 读即清信源审计:两个读即清寄存器与两级门控、现存读清点全量清单
(产品代码 6 处)、已根除的三条互吞实例、一处"看着像缺陷其实是配对
消费"、新增一处读清的三条准入判据 + 结构性残余。AGENTS.md 的 CH395F
单连接 socket 条目加指针。
3. §1.5 与主流 offload 驱动的代码级对照(正面回答"是不是过度设计"):
ioLibrary close()/listen() 原文、四个机制一一映射、三条约束差异表、
"死等把代价挪到运行时"、lwIP/Zephyr 对照、诚实清单(可省 16 B / 不可省
沉降窗 + D10 + listen 前排清 + 登记执行分离)、唯一杠杆是芯片。
4. 模块归属修正(承接 63cf73b 的 net_events.c 抽出):
- §11.5 新增一节,含"为什么是一个模块而不是两个"(对账真实调用事件
处理器 2 处 + NET_RECON_STABLE_DEATH 两边共用)与三处非纯搬移;
- §9 行数快照更新,并加警告:这类快照**当天就会漂移**,是地图不是判据;
- §1.5 的 net_listener.c 行数随注释精简同步(508/277 → 386/155)。
引用修正波及 5 个文件:BSD_Socket_API 使用指南文件职责表(拆出
net_events.c 行)、函数调用关系 §4.8 标题、Net 层阻塞模型两处形态⑤表格、
CH395F_Trap_Records 两处"对应文件"(保留"原在 net_socket.c"的历史)。
⚠ doc-links 只校验 § 编号存在性,照不出"函数在哪个文件"——这类归属
漂移门禁不拦,必须人工扫。
验证:check_doc_links --all --sections-strict PASS(2146 处引用,可判定
1263,无法判定 0,142 文档);ci_local L0 32 钩子 + L0.5 953/953 全过。
This commit is contained in:
@@ -487,7 +487,7 @@ recv 与 send 各一组(send 组前缀 `net_send_pending_`),共 14 个函
|
||||
| 4 | 挂起登记与回执抑制 | `net_socket.c` `net_process_messages` 的 `NET_MSG_RECV` 分支 | `net_recv_locked` 返回哨兵 → `do_notify = 0` | "登记成功"被当结果回执(误报) |
|
||||
| 5 | 关闭结算 | `net_socket.c` `net_close_locked` 首行 | `net_pending_settle_close` | close 丢已到数据 / 调用方挂死 |
|
||||
| 6 | 拆会话结算 | `net_socket.c` `net_drop_conn_locked` 首行 | `net_pending_settle_close` | 同上 |
|
||||
| 7 | 静默回收取消 | `net_socket.c` `net_reconcile_tick` 形态⑤ | `net_pending_cancel(i, NET_ERR_CONNRESET)` | 芯片静默回收后挂起 recv 无唤醒源 |
|
||||
| 7 | 静默回收取消 | `net_events.c` `net_reconcile_tick` 形态⑤ | `net_pending_cancel(i, NET_ERR_CONNRESET)` | 芯片静默回收后挂起 recv 无唤醒源 |
|
||||
| 8 | 重开 Socket 保险 | `net_listener.c` `net_listener_tick` | `net_pending_active(i)` 命中则 `continue` | 重开 Socket **摧毁在途连接** |
|
||||
| 9 | 新 fd 清槽 | `net_socket.c` `alloc_socket` | `net_pending_clear(sockfd)` | fd 复用继承旧挂起 → 新会话立即 EOF / 结果错位 |
|
||||
| 10 | close 幂等清槽 | `net_socket.c` `net_close_locked` 尾部 | `net_pending_clear(sockfd)` | 槽位残留(虽经 settle 已通知,仍须归零) |
|
||||
@@ -502,7 +502,7 @@ recv 与 send 各一组(send 组前缀 `net_send_pending_`),共 14 个函
|
||||
| 14 | 每轮推进 | `net_socket.c` `net_process_messages` 开头(`net_pending_tick` 之后) | `net_send_pending_tick(s_net_socks)` | 挂起 send **永不推进 / 永不完成** |
|
||||
| 15 | send 登记与回执抑制 | `net_socket.c` `net_process_messages` 的 `NET_MSG_SEND` 分支 | `net_send_locked` 返回哨兵 → `do_notify = 0` | "登记成功"被当结果回执(误报) |
|
||||
| 16 | 关闭 / 拆会话取消 | `net_socket.c` `net_close_locked` / `net_drop_conn_locked` | `net_send_pending_cancel(fd, NET_ERR_CONNRESET)` | 挂起 send 的调用方**永久挂死**(已发字节数收不回来) |
|
||||
| 17 | 静默回收取消 | `net_socket.c` `net_reconcile_tick` 形态⑤ | `net_send_pending_cancel(i, NET_ERR_CONNRESET)` | 芯片静默回收后挂起 send 无唤醒源 |
|
||||
| 17 | 静默回收取消 | `net_events.c` `net_reconcile_tick` 形态⑤ | `net_send_pending_cancel(i, NET_ERR_CONNRESET)` | 芯片静默回收后挂起 send 无唤醒源 |
|
||||
| 18 | 重建前取消 | `net_socket.c` `net_init` 顶部(芯片复位前) | `net_send_pending_cancel_all(NET_ERR_CONNRESET)` | 重建前挂起的调用方**永久挂死** |
|
||||
| 19 | 新 fd / close 清槽 | `net_socket.c` `alloc_socket` / `net_close_locked` 尾部 | `net_send_pending_clear(sockfd)` | fd 复用继承旧挂起 send → 新会话误写旧缓冲 |
|
||||
| 20 | send 重开保险 | `net_listener.c` `net_listener_tick` | `net_send_pending_active(i)` 命中则 `continue` | 重开 Socket **摧毁在途传输**(半写的数据流被截断) |
|
||||
|
||||
Reference in New Issue
Block a user