From 98d9b99cf6e2196b70663fa14049ab4d8a7f382c Mon Sep 17 00:00:00 2001 From: wangfq Date: Thu, 23 Jul 2026 17:41:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960DBN):=20=E6=96=AD=E8=BF=9E=E9=87=8D?= =?UTF-8?q?=E8=BF=9E=E6=97=B6=E9=87=8D=E5=BB=BA=20TCP=20socket=20(?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E5=A4=8D=E7=94=A8=E5=B7=B2=20close=20?= =?UTF-8?q?=E7=9A=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit root cause 1: 3次失败断连后, iot_connect_broker() 只设 g_iot_socket=SocketId_TCP, 但 WCHNET_SocketClose 后 socket 已销毁, 没有重建 → TCP connect 一直超时 root cause 2: old socket close 未完成就立即重连, WCHNET_SocketCreat 可能失败 fix: 1. iot_connect_broker() 先调 WCHNET_CreateTcpMqttSocket() 真正 create + connect 2. 3次失败后加 3s 延迟再重连, 给 WCHNET 清理时间 --- vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c index 2d6180b..1303886 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/iot_mqtt_srv.c @@ -314,6 +314,7 @@ static int iot_mqtt_send(const uint8_t *buf, uint16_t len) { g_iot_socket = 0xFF; g_iot_state = IOT_STATE_DISCONNECTED; _iot_send_fail_cnt = 0; + _iot_reconnect_deadline = mstick() + 3000; // 3s 后重连, 让 WCHNET 清旧 socket } return -1; } @@ -829,9 +830,10 @@ void iot_mqtt_publish_sensor(void) { * 连接管理 *===========================================================================*/ -/* 连接到 MQTT Broker — 复用 SocketId_TCP(已由 WCHNET_CreateTcpMqttSocket 创建并连接) */ +/* 连接到 MQTT Broker — 重新创建 TCP socket 并发起连接 */ static void iot_connect_broker(void) { - g_iot_socket = SocketId_TCP; // 复用已创建的 MQTT socket + WCHNET_CreateTcpMqttSocket(); // 重新 create + connect (不是复用旧的!) + g_iot_socket = SocketId_TCP; g_iot_state = IOT_STATE_TCP_CONNECTING; _iot_connect_start = mstick(); PRINT("IOT: TCP connecting to broker (sock=%d)...\n", g_iot_socket);