修复net公开API错误码被覆盖致UI推流连上即断(改用通知值回传,单连接EOF不关监听)
This commit is contained in:
@@ -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; /* 重建失败:交回主循环重试 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user