修复net公开API错误码被覆盖致UI推流连上即断(改用通知值回传,单连接EOF不关监听)

This commit is contained in:
2026-09-21 04:46:47 +08:00
parent 57632e910a
commit 5cb7614959
3 changed files with 54 additions and 15 deletions
+10 -6
View File
@@ -444,12 +444,16 @@ void ui_net_sink_poll(void) {
rm_parser_feed((uint8_t)g_rx[i]);
}
} else if (n == 0) {
/* 对端关闭:关闭客户端,必要时重建监听(单连接模型下监听随客户端失效) */
net_close(g_client);
/* 对端关闭:单连接模型下监听通道与数据通道是同一个 Socket,net 层已在
* net_recv_locked 的 CLOSED 分支自动把该 Socket 放回 LISTEN;此处绝不能再
* net_close 它,否则监听一并被毁(后续连接被拒),且重建监听受 Trap 09 时序限制 */
if (g_client != g_listen) {
net_close(g_client); /* 多连接后端(PC 模拟器):数据通道独立,需显式关闭 */
}
g_client = -1;
rm_parser_reset();
if (net_get_sock(g_listen) == NULL) {
(void)bind_listen();
if (net_get_sock(g_listen) == NULL && bind_listen() < 0) {
g_listen = -1; /* 重建失败:交回主循环重试,避免拿失效 fd 反复 accept */
}
} else {
/* n < 0:区分"暂无数据"(继续等待)与"真错误"(断开并视情况重建监听) */
@@ -457,8 +461,8 @@ void ui_net_sink_poll(void) {
net_close(g_client);
g_client = -1;
rm_parser_reset();
if (net_get_sock(g_listen) == NULL) {
(void)bind_listen();
if (net_get_sock(g_listen) == NULL && bind_listen() < 0) {
g_listen = -1; /* 重建失败:交回主循环重试 */
}
}
}