From 2e26fc9224b019f5630258c0198cd0148766cb82 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 4 Jul 2016 12:25:22 +0200 Subject: [PATCH] tcp: Avoid 3-second delay for a half-open connection If lwIP encounters a half-open connection (e.g. due to a restarted application reusing the same port numbers) it will correctly send a RST but will not resend the SYN until one retransmission timeout later (approximately three seconds). This can increase the time taken by lpxelinux.0 to fetch its configuration file from a few milliseconds to around 30 seconds. Fix by immediately retransmitting the SYN whenever a half-open connection is detected. Signed-off-by: Michael Brown Signed-off-by: goldsimon --- src/core/tcp_in.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/tcp_in.c b/src/core/tcp_in.c index f291887f..6795276f 100644 --- a/src/core/tcp_in.c +++ b/src/core/tcp_in.c @@ -812,6 +812,10 @@ tcp_process(struct tcp_pcb *pcb) /* send a RST to bring the other side in a non-synchronized state. */ tcp_rst(ackno, seqno + tcplen, ip_current_dest_addr(), ip_current_src_addr(), tcphdr->dest, tcphdr->src); + /* Resend SYN immediately (don't wait for rto timeout) to establish + connection faster */ + pcb->rtime = 0; + tcp_rexmit_rto(pcb); } break; case SYN_RCVD: