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:
@@ -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__ */
|
||||
|
||||
Reference in New Issue
Block a user