Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 04 Apr 2004 15:27:41 -0600
From:      Brandon Erhart <berhart@ErhartGroup.COM>
To:        freebsd-net@freebsd.org
Subject:   FIN_WAIT_[1,2] and LAST_ACK
Message-ID:  <6.0.2.0.2.20040404152043.01c83320@mx1.erhartgroup.com>

next in thread | raw e-mail | index | archive | help
Hello everyone,

I am writing a network application that mirrors a given website (such as a 
suped-up "wget"). I use a lot of FDs, and was getting connect() errors when 
I would run out of local_ip:local_port tuples. I lowered the MSL so that 
TIME_WAIT would timeout very quick (yes, I know, this is "bad", but I'm 
going for sheer speed here), and it alleviated the problem a bit.

However, I have run into a new problem. I am getting a good amount of 
blocks stuck in FIN_WAIT_1, FIN_WAIT_2 or LAST_ACK that stick around for a 
long while. I have been unable to find must information on a timeout for 
these states. I came across a small patch that modified tcp_timer.c in 
/usr/src/sys/netinet. It changed line #484 (in FreeBSD 4.9-REL) from:

if (tp->t_state != TCPS_TIME_WAIT &&

to

if (tp->t_state < FIN_WAIT_2 &&

I also tried changing that to ".. <= FIN_WAIT_2 .."

However, I still end up with quite a few stuck in FIN_WAIT_1, FIN_WAIT_2 or 
LAST_ACK after the program exits (and whilst the program is running of 
course). They don't seem to timeout in the same interval that TIME_WAIT does.

Any ideas? Did I modify the right piece of code? I was told to post here as 
you all would more than likely know!

I am stumped.

Thank you all in advance,

Brandon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.0.2.0.2.20040404152043.01c83320>