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
+6
View File
@@ -8,6 +8,8 @@
#include "lwip/pbuf.h"
#include "lwip/tcp.h"
#include "SEGGER_RTT.h"
#include <string.h>
typedef struct {
@@ -49,6 +51,7 @@ static err_t tcp_server_on_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
}
ctx->client_pcb = NULL;
ctx->status.state = TCP_SERVER_STATE_LISTENING;
SEGGER_RTT_WriteString(0, "TCP server peer disconnected\r\n");
return ERR_OK;
}
@@ -85,6 +88,7 @@ static void tcp_server_on_err(void *arg, err_t err)
ctx->client_pcb = NULL;
ctx->status.state = TCP_SERVER_STATE_LISTENING;
ctx->status.errors++;
SEGGER_RTT_printf(0, "TCP server connection error=%d\r\n", (int)err);
}
static err_t tcp_server_on_accept(void *arg, struct tcp_pcb *newpcb, err_t err)
@@ -103,6 +107,7 @@ static err_t tcp_server_on_accept(void *arg, struct tcp_pcb *newpcb, err_t err)
ctx->client_pcb = newpcb;
ctx->status.state = TCP_SERVER_STATE_CONNECTED;
ctx->status.connections++;
SEGGER_RTT_WriteString(0, "TCP server client connected\r\n");
tcp_nagle_disable(newpcb);
@@ -158,6 +163,7 @@ int tcp_server_start(void)
tcp_arg(g_server.listen_pcb, &g_server);
tcp_accept(g_server.listen_pcb, tcp_server_on_accept);
g_server.status.state = TCP_SERVER_STATE_LISTENING;
SEGGER_RTT_printf(0, "TCP server listening on %u\r\n", g_server.config.port);
return 0;
}