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:
@@ -314,6 +314,7 @@ static int iot_mqtt_send(const uint8_t *buf, uint16_t len) {
|
|||||||
g_iot_socket = 0xFF;
|
g_iot_socket = 0xFF;
|
||||||
g_iot_state = IOT_STATE_DISCONNECTED;
|
g_iot_state = IOT_STATE_DISCONNECTED;
|
||||||
_iot_send_fail_cnt = 0;
|
_iot_send_fail_cnt = 0;
|
||||||
|
_iot_reconnect_deadline = mstick() + 3000; // 3s 后重连, 让 WCHNET 清旧 socket
|
||||||
}
|
}
|
||||||
return -1;
|
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) {
|
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;
|
g_iot_state = IOT_STATE_TCP_CONNECTING;
|
||||||
_iot_connect_start = mstick();
|
_iot_connect_start = mstick();
|
||||||
PRINT("IOT: TCP connecting to broker (sock=%d)...\n", g_iot_socket);
|
PRINT("IOT: TCP connecting to broker (sock=%d)...\n", g_iot_socket);
|
||||||
|
|||||||
Reference in New Issue
Block a user