feat: TCP Server 自动重启机制 — 3种超时条件

触发条件(任一满足即重启):
1. 5分钟无任何连接 (从未连或上次连接后超时)
2. 5分钟无数据交互 (已连接但静默)
3. Auth 密码错误3次

重启流程: 关闭socket→清状态→重新SocketCreat+SocketListen
保护机制: 最多连续重启3次, 超限后进入10分钟冷却期

其他改动:
- tcp_json_srv_init 去掉 _init_done 限制, 支持重新初始化
- 新增 tcp_json_restart() 函数
- 新增 g_json_last_comm_ts / g_json_last_connect_ts 追踪
- CONNECT 时清零 restart_count (正常连接重置计数器)
This commit is contained in:
wangfq
2026-07-03 11:46:17 +08:00
parent d9059fac92
commit 5966eb8657
2 changed files with 119 additions and 26 deletions
@@ -22,6 +22,9 @@
#define TCP_JSON_RECV_BUF_LEN (TCP_JSON_MAX_FRAME * 2)
#define TCP_JSON_MAX_PWD_RETRY 3 // Max password retries before lockout
#define TCP_JSON_LOCKOUT_TIMEOUT_MS 60000 // 60s lockout after max retries
#define TCP_JSON_IDLE_TIMEOUT_MS 300000 // 5min idle → restart (no connect / no comm)
#define TCP_JSON_MAX_RESTART_COUNT 3 // Max auto-restart count
#define TCP_JSON_RESTART_COOLDOWN_MS 600000 // 10min cooldown after max restarts
/*===========================================================================
* Auth / State
@@ -63,6 +66,10 @@ extern TcpJsonAuthState g_json_auth_state;
extern uint32_t g_json_auth_timer; // ms timer for auth timeout
extern uint8_t g_json_pwd_retry; // password retry counter
extern TcpJsonPending g_json_pending; // Pending Loop MCU command state
extern uint32_t g_json_last_comm_ts; // Last communication timestamp (ms)
extern uint32_t g_json_last_connect_ts; // Last client connect timestamp (ms)
extern uint8_t g_json_restart_count; // Auto-restart counter
extern uint32_t g_json_restart_cooldown; // Cooldown deadline (ms)
/*===========================================================================
* API
@@ -71,5 +78,6 @@ void tcp_json_srv_init(void); // Create listen socket on port
void tcp_json_handle_sock_int(uint8_t socketid, uint8_t intstat); // Socket interrupt handler
void tcp_json_poll(void); // Periodic poll (auth timeout, etc.)
void tcp_json_push_sensor(void); // Push sensor data (0xC0) to TCP client
void tcp_json_restart(void); // Close + reopen socket (auto-restart)
#endif /* __TCP_JSON_SRV_H__ */