Browse Source

fix RST on FIN: tcp_recved in proxy_recv_cb BEFORE closing_tun, guard proxy_err_cb with !closing_sent

congestion
Evgeny 4 months ago
parent
commit
80e4e4fd5d
  1. 4
      src/tcp_proxy.c

4
src/tcp_proxy.c

@ -262,6 +262,8 @@ static err_t proxy_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t
if (p == NULL || err != LERR_OK) {
DEBUG_INFO(DEBUG_CATEGORY_SOCKET, "PROXY FIN stream=%016llx tun=1 active=%d", (unsigned long long)(pc->remote_stream_id ? pc->remote_stream_id : 0), pc->active);
{ uint16_t wnd_gap = TCP_WND_MAX(pcb) - pcb->rcv_wnd;
if (wnd_gap > 0) tcp_recved(pcb, wnd_gap); }
pc->closing_tun = 1;
return LERR_OK;
}
@ -303,7 +305,7 @@ static void proxy_err_cb(void *arg, err_t err) {
if (!pc) return;
DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "TCP proxy: tcp error %d", err);
pc->closing_tun = 1;
if (pc->transport) pc->transport->ops->close(pc->transport);
if (pc->transport && !pc->closing_sent) pc->transport->ops->close(pc->transport);
}
static err_t proxy_poll_cb(void *arg, struct tcp_pcb *pcb) {

Loading…
Cancel
Save