Browse Source

Release TUN proxy connections when lwIP aborts their PCB

proxy
evgeny 2 days ago
parent
commit
09bc8c35c5
  1. 11
      src/proxy/tcp_proxy_client.c

11
src/proxy/tcp_proxy_client.c

@ -452,12 +452,11 @@ static void tcp_proxy_client_err_cb(void *arg, err_t err) {
DEBUG_ERROR(DEBUG_CATEGORY_PROXY, "TCP proxy client: error %d sid=%08x fin_local=%d rem_closed=%d", DEBUG_ERROR(DEBUG_CATEGORY_PROXY, "TCP proxy client: error %d sid=%08x fin_local=%d rem_closed=%d",
err, pc->stream_id, pc->fin_local, pc->rem_closed); err, pc->stream_id, pc->fin_local, pc->rem_closed);
pc->pcb = NULL; // pcb уже освобождён (или вот-вот) стеком lwip — не разыменовывать pc->pcb = NULL; // pcb уже освобождён (или вот-вот) стеком lwip — не разыменовывать
if (err == LERR_CLSD) { // graceful close активной стороной — ERROR слать не нужно if (err != LERR_CLSD) {
tcp_proxy_client_conn_free(pc); pc->error = 1;
return; if (tcp_proxy_client_send_error(pc) < 0) DEBUG_ERROR(DEBUG_CATEGORY_PROXY, "PROXY send_error failed sid=%08x", pc->stream_id);
} }
pc->error = 1; tcp_proxy_client_conn_free(pc);
if (tcp_proxy_client_send_error(pc) < 0) DEBUG_ERROR(DEBUG_CATEGORY_PROXY, "PROXY send_error failed sid=%08x", pc->stream_id);
} }
static err_t tcp_proxy_client_poll_cb(void *arg, struct tcp_pcb *pcb) { static err_t tcp_proxy_client_poll_cb(void *arg, struct tcp_pcb *pcb) {
@ -476,7 +475,7 @@ static err_t tcp_proxy_client_poll_cb(void *arg, struct tcp_pcb *pcb) {
pc->pcb = NULL; pc->pcb = NULL;
} }
tcp_proxy_client_conn_free(pc); tcp_proxy_client_conn_free(pc);
return LERR_OK; return LERR_ABRT;
} }
if (pc->close_pending) { if (pc->close_pending) {

Loading…
Cancel
Save