fix(vd960DBN): 断连重连时重建 TCP socket (不是复用已 close 的)

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 清理时间
This commit is contained in:
wangfq
2026-07-23 17:41:41 +08:00
parent 7c0de6c566
commit 98d9b99cf6
@@ -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);