diff --git a/src/tcp_proxy.c b/src/tcp_proxy.c index 642b7147..599d09bf 100644 --- a/src/tcp_proxy.c +++ b/src/tcp_proxy.c @@ -325,7 +325,10 @@ static err_t proxy_poll_cb(void *arg, struct tcp_pcb *pcb) { (unsigned long long)pc->remote_stream_id, pc->closing_rem, pc->closing_sent, pc->pcb->cwnd, pc->pcb->snd_buf, (void*)pc->pcb->unsent, (void*)pc->pcb->unacked); struct tcp_pcb *save = pc->pcb; - tcp_arg(save, NULL); pc->pcb = NULL; tcp_close(save); + tcp_arg(save, NULL); pc->pcb = NULL; + { uint16_t wnd_gap = TCP_WND_MAX(save) - save->rcv_wnd; + if (wnd_gap > 0) tcp_recved(save, wnd_gap); } + tcp_close(save); struct tcp_proxy *proxy = pc->proxy; struct proxy_conn **prev = &proxy->conns; while (*prev) { if (*prev == pc) { *prev = pc->next; proxy->conn_count--; break; } prev = &(*prev)->next; }