refactor(NET): 源码注释去阶段化 + 网络两份文档重构 + 不稳根因图更新
- 源码注释:删去自愈收敛阶段 1/1.5/3等 scaffolding 称谓,改为语义引用 (E-02 收口 / F-NET-2/3/4 / docs/网络/网络自愈架构设计.md §5.2 E13); 涉及 net_socket/.h、net_events、net_listener、net_pending、net_types、 net_config、ch395f、time_sync、iec104_serv、ui_net_sink、lftpd、 simulator/sim/net_socket_sim、board/host 测试与探针 - 文档重构:网络自愈架构设计.md 与 Net层阻塞模型架构设计.md 改为现状口径 (删历史节与阶段叙事),NET/README.md、docs/README.md 同步 - 工具与配图:gen_net_instability_svg.py 与 docs/images/网络不稳根因总览.svg 随源码口径一并更新 - 门禁:@build 0 错误 0 警告
This commit is contained in:
@@ -124,10 +124,10 @@ static int time_sync_open_listener(void) {
|
||||
* 入口参数:conn_sock - 已建立的连接 Socket 描述符(单连接模式下即监听 Socket 自身)
|
||||
* 返回值:无
|
||||
* 函数说明:pending 读取 PC 发来的时间包("TIME"+uint32 大端 本地时间),解析后
|
||||
* 写回 RTC。**不在此 close**(自愈收敛阶段1-5:单连接模式下 conn_sock 即
|
||||
* 写回 RTC。**不在此 close**(单连接模式下 conn_sock 即
|
||||
* 监听 fd,close 连监听一起毁、重建窗 ~0.3-1s;net 层 auto_relisten
|
||||
* 已把同 fd 收回监听,外层直接续 accept——lftpd 样板)。每次等待 =
|
||||
* 一次挂起请求(netTask 零占用,L3 pending 化),单次超时 = 剩余总预算
|
||||
* 一次挂起请求(netTask 零占用),单次超时 = 剩余总预算
|
||||
* (≤30s,语义与旧 30s 阻塞一致);跨调用累积,容忍时间包被 TCP 分段送达
|
||||
*/
|
||||
static void time_sync_handle_conn(int conn_sock) {
|
||||
@@ -180,14 +180,14 @@ static void time_sync_handle_conn(int conn_sock) {
|
||||
DBG_INFO("time_sync: wall clock updated (epoch=%lu)", (unsigned long)epoch);
|
||||
}
|
||||
} else {
|
||||
/* 自愈收敛阶段 3(E-02 收口,《网络自愈架构设计》§5.2 E13):本层放弃会话 → 主动拆除。
|
||||
/* E-02 收口(docs/网络/网络自愈架构设计.md §5.2 E13):本层放弃会话 → 主动拆除。
|
||||
* 挂起但 TCP 仍活的客户端(PC 内核自动 ACK keepalive,芯片僵尸判不死)
|
||||
* 会永久占住单连接监听;EOF 路径 drop 幂等返 0(net 层已 relisten)。
|
||||
* 模拟器多连接后端 conn≠ls,由 sim 实现按数据 fd 关闭。 */
|
||||
(void)net_drop_conn(conn_sock);
|
||||
}
|
||||
|
||||
/* 自愈收敛阶段1-5:原 net_close(conn_sock) 已删——单连接模式 conn==监听 fd,
|
||||
/* 原 net_close(conn_sock) 已删——单连接模式 conn==监听 fd,
|
||||
* close 毁监听(AGENTS 模块约定:EOF 时应用层不得 close);net 层
|
||||
* auto_relisten 已把同 fd 收回 LISTENING,外层循环直接续 accept。
|
||||
* 模拟器多连接后端 conn≠ls,由调用方(外层)负责关数据 fd。 */
|
||||
@@ -199,7 +199,7 @@ static void time_sync_handle_conn(int conn_sock) {
|
||||
* 返回值:无
|
||||
* 限定条件:net_init() 已由 netTask 完成;netTask 正在处理消息队列
|
||||
* 函数说明:等待网络栈就绪后,循环:建监听 -> 等连接 -> 处理 -> **同 fd 续
|
||||
* accept**(自愈收敛阶段1-5:会话收尾不 close,监听跨会话常驻,仅网络
|
||||
* accept**(会话收尾不 close,监听跨会话常驻,仅网络
|
||||
* 代次变化时重建)。全部 socket 操作经消息队列由 netTask 串行执行,
|
||||
* 与本任务/其它网络任务并发安全。
|
||||
*/
|
||||
@@ -226,7 +226,7 @@ void time_sync_task(void *argument) {
|
||||
}
|
||||
}
|
||||
|
||||
/* 监听 fd 跨会话常驻(自愈收敛阶段1-5):仅首次/网络代次变化/被毁时重建 */
|
||||
/* 监听 fd 跨会话常驻:仅首次/网络代次变化/被毁时重建 */
|
||||
int ls = -1;
|
||||
|
||||
for (;;) {
|
||||
@@ -266,7 +266,7 @@ void time_sync_task(void *argument) {
|
||||
}
|
||||
|
||||
time_sync_handle_conn(conn);
|
||||
/* 自愈收敛阶段1-5:会话收尾不 close(单连接模式 conn==ls,close 连监听
|
||||
/* 会话收尾不 close(单连接模式 conn==ls,close 连监听
|
||||
* 一起毁);net 层 auto_relisten 已把同 fd 收回 LISTENING,下轮循环
|
||||
* 直接续 accept。模拟器多连接后端(conn≠ls)才关数据 fd。 */
|
||||
if (conn != ls) {
|
||||
|
||||
@@ -224,11 +224,11 @@ static void s_serv_poll(void) {
|
||||
if (s_client < 0) {
|
||||
int c;
|
||||
|
||||
/* 自愈收敛阶段1(F-NET-4):门控从 net_can_accept(只认 ESTABLISHED,已退役)
|
||||
/* F-NET-4:门控从 net_can_accept(只认 ESTABLISHED,已退役)
|
||||
* 迁 net_listener_armed——旧门控把 LISTENING 窗口全挡掉,:2404 的丢
|
||||
* CONNECT 探针(net_accept_locked 内)因此从不运行(与已修的 :7003
|
||||
* 同型);armed=ESTABLISHED 待 accept / LISTENING /
|
||||
* CLOSED+auto_relisten+残留(ESTABLISHED 放行为 2026-10-13 台架补齐:
|
||||
* CLOSED+auto_relisten+残留(ESTABLISHED 放行由台架实证补齐:
|
||||
* 漏它则本任务 200ms 周期抢不过对账② ~400ms 去抖、整场饿死) */
|
||||
if (net_listener_armed(s_listen) == 0) {
|
||||
if (net_get_sock(s_listen) == NULL) {
|
||||
@@ -258,7 +258,7 @@ static void s_serv_poll(void) {
|
||||
s_liveness_ctr = 0u;
|
||||
}
|
||||
|
||||
/* 自愈收敛阶段 1.5:DONTWAIT 转正为具名 API net_recv_nb——本任务在 IWDG
|
||||
/* DONTWAIT 已转正为具名 API net_recv_nb——本任务在 IWDG
|
||||
* required_mask 内且有 100ms 周期职责(喂狗/链路节拍/上送),禁止无限
|
||||
* 阻塞 recv(文档契约见 net_socket.h net_recv 注释),非阻塞轮询是义务 */
|
||||
n = net_recv_nb(s_client, s_rx, (int)sizeof(s_rx));
|
||||
|
||||
Reference in New Issue
Block a user