fix: harden tcp bridge reconnect handling

This commit is contained in:
2026-04-03 05:57:52 +08:00
parent fd1fae8ad7
commit 9fd748c512
5 changed files with 247 additions and 10 deletions
+33 -8
View File
@@ -68,19 +68,44 @@ static volatile uint16_t g_led_blink_ticks = 0;
static uint8_t g_clock_fallback_to_hsi = 0u;
volatile uint8_t g_uart1_rx_probe_byte = 0u;
typedef struct {
uint8_t data[256];
uint16_t len;
} tcp_bridge_buffer_t;
static tcp_bridge_buffer_t g_server_to_client;
static tcp_bridge_buffer_t g_client_to_server;
static void App_ForwardTcpPair(void)
{
uint8_t buffer[256];
int len;
int rc;
len = tcp_server_recv(buffer, sizeof(buffer), 0u);
if (len > 0) {
(void)tcp_client_send(buffer, (uint16_t)len);
if ((g_server_to_client.len == 0u) && tcp_server_is_connected()) {
rc = tcp_server_recv(g_server_to_client.data, sizeof(g_server_to_client.data), 0u);
if (rc > 0) {
g_server_to_client.len = (uint16_t)rc;
}
}
len = tcp_client_recv(buffer, sizeof(buffer), 0u);
if (len > 0) {
(void)tcp_server_send(buffer, (uint16_t)len);
if ((g_server_to_client.len != 0u) && tcp_client_is_connected()) {
rc = tcp_client_send(g_server_to_client.data, g_server_to_client.len);
if (rc == (int)g_server_to_client.len) {
g_server_to_client.len = 0u;
}
}
if ((g_client_to_server.len == 0u) && tcp_client_is_connected()) {
rc = tcp_client_recv(g_client_to_server.data, sizeof(g_client_to_server.data), 0u);
if (rc > 0) {
g_client_to_server.len = (uint16_t)rc;
}
}
if ((g_client_to_server.len != 0u) && tcp_server_is_connected()) {
rc = tcp_server_send(g_client_to_server.data, g_client_to_server.len);
if (rc == (int)g_client_to_server.len) {
g_client_to_server.len = 0u;
}
}
}