Browse Source

Release TUN proxy connections when lwIP aborts their PCB

proxy
evgeny 3 days ago
parent
commit
09bc8c35c5
  1. 9
      src/proxy/tcp_proxy_client.c

9
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",
err, pc->stream_id, pc->fin_local, pc->rem_closed);
pc->pcb = NULL; // pcb уже освобождён (или вот-вот) стеком lwip — не разыменовывать
if (err == LERR_CLSD) { // graceful close активной стороной — ERROR слать не нужно
tcp_proxy_client_conn_free(pc);
return;
}
if (err != LERR_CLSD) {
pc->error = 1;
if (tcp_proxy_client_send_error(pc) < 0) DEBUG_ERROR(DEBUG_CATEGORY_PROXY, "PROXY send_error failed sid=%08x", pc->stream_id);
}
tcp_proxy_client_conn_free(pc);
}
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;
}
tcp_proxy_client_conn_free(pc);
return LERR_OK;
return LERR_ABRT;
}
if (pc->close_pending) {

Loading…
Cancel
Save