tcp_proxy_client: skip tcp_shutdown on TIME_WAIT/CLOSED pcb
handle_fin вызывает tcp_shutdown(pcb,0,1) на любом PCB, включая TIME_WAIT. При active close (FIN_WAIT_1→FIN_WAIT_2→TIME_WAIT) PCB уже в tw_pcbs, tcp_shutdown на нём портит состояние → tw_pcbs зацикливается → lwip_tcp_input зависает. Проверка state != TIME_WAIT && != CLOSED перед вызовом.
This commit is contained in:
1 parent
6f1916b6b2
commit
483bf440fb
1 file changed
+2
-1
@@ -470,7 +470,8 @@ static void tcp_proxy_client_handle_fin(struct tcp_proxy_client* p, uint32_t str
|
||||
if (!pc || !pc->pcb) return;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_SOCKET, "PROXY FIN FROM exit sid=%08x — shutdown read", stream_id);
|
||||
pc->fin_remote = 1;
|
||||
tcp_shutdown(pc->pcb, 0, 1);
|
||||
if (pc->pcb->state != TIME_WAIT && pc->pcb->state != CLOSED)
|
||||
tcp_shutdown(pc->pcb, 0, 1);
|
||||
if (pc->fin_local && !pc->close_sent && !pc->close_pending)
|
||||
tcp_proxy_client_send_close(pc);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user