From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24191 invoked by alias); 21 Oct 2003 15:42:47 -0000 Mailing-List: contact ecos-discuss-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@sources.redhat.com Received: (qmail 24158 invoked from network); 21 Oct 2003 15:42:45 -0000 Received: from unknown (HELO web14206.mail.yahoo.com) (216.136.173.70) by sources.redhat.com with SMTP; 21 Oct 2003 15:42:45 -0000 Message-ID: <20031021154244.53999.qmail@web14206.mail.yahoo.com> Received: from [208.248.82.254] by web14206.mail.yahoo.com via HTTP; Tue, 21 Oct 2003 08:42:44 PDT Date: Tue, 21 Oct 2003 15:42:00 -0000 From: Matt Jerdonek To: Andrew Lunn Cc: Discussion eCos In-Reply-To: <20031021071625.GA14931@lunn.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [ECOS] TCP Transactions X-SW-Source: 2003-10/txt/msg00366.txt.bz2 --- Andrew Lunn wrote: > On Mon, Oct 20, 2003 at 04:27:11PM -0700, Matt > Jerdonek wrote: > > Hello again, > > > > I'm developing an application that sends small > > transactions via TCP. The basic flow is 1) Bring > up > > the connection 2) Send request 3) Get response 4) > > Bring down the connection. Simple enough ... > > > > But, when running any volume of transactions, all > my > > socket file descriptors get stuck in TIME_WAIT > state. > > When this occurs, my application is effectively > > disabled until a file descriptor times out. > > Is this the client or the server end that has the > problem? > > Are you doing a setsocketopt() for SO_REUSEADDR? > > > Andrew > Andrew, Thanks for the reply. My code is the client end of the connection. Initially, my code was a call only to socket() and a call to connect(). I changed it to a call to socket(), setsockopt(REUSEADDR), setsockopt(REUSEPORT), bind(), and connect(). In both cases, it failed. Please look at the following code from bsd_tcpip/ver/src/sys/netinet/tcp_usrreq.c ------------------------------------- /* * Cannot simply call in_pcbconnect, because there * might be an * earlier incarnation of this same connection still in * TIME_WAIT state, creating an ADDRINUSE error. */ oinp = in_pcblookup_hash(...); if (oinp) { if (...RFC1644 check...) otp = tcp_close(otp); else return EADDRINUSE; } ----------------------------------- I think I have to find a method to shorten the TIME_WAIT state. The TIME_WAIT state is defined as 2 * MSL (or 60 seconds). If I make the MSL configurable, I can shorten the TIME_WAIT. Is this reasonable? Thanks, -- Matt __________________________________ Do you Yahoo!? The New Yahoo! Shopping - with improved product search http://shopping.yahoo.com -- Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos and search the list archive: http://sources.redhat.com/ml/ecos-discuss