No subject

Benjamin Franks benjamin at golly.com
Wed Dec 5 09:54:43 CST 2001


I'm using the LWP::UserAgent for a small tcp/ip client/server application I've written.  All that the client does is query a small http server I've written on a different host.  It works.  

However, after a couple thousand connections, I notice the client(s) stop getting info from the server.  They continue to run, but when I look at netstat, I see a high number of clients stuck in the FIN_WAIT_2 state (the second part of the disconnection sequence).  They don't seem to come out of this state.  Concurrent with this problem, I notice error messages from the client something like:
  Can't locate LWP/Authen/Negotiate.pm in @INC ...
  Can't locate LWP/Authen/Ntlm.pm in @INC ...
But these errors only come up after the application has run for a long time, and seem to also coincide with a lot of waiting processes which haven't disconnected.

Here is the rough-code for the small, custom web server.  It's a single-process, no-threads, doesn't fork, etc..  I'm running FreeBSD 4.3 on both client and server system.  Has anyone had problems like this before?  I've been looking through Stephen's Unix Network Programming, and there are small references to things like shutting down sockets rather than closing them.  Or that on BSD, there is a roughly 11 minute timeout for FIN_WAIT_2 states.  Is there a sysctl variable I can set to decrease this?  Am I running out of descriptors when too many get locked in FIN_WAIT_2, and is that why I can't successfully request?  

Any info or ideas would be appreciated.  Thank you,
--Ben 


my $socket=IO::Socket::INET->new ( LocalPort   => $port,
                                   Listen      => SOMAXCONN,
                                   Reuse       => 1 ) or die "oops: $!";

while (#some continuation conditions#) {
	eval {
      		local $SIG{HUP}=sub{$done++; die;};
      		($c,$remote_addr)=$socket->accept;
   	};
   	local $/ = "\015\012\015\012";
   	$req=<$c>;
  
	if ($c) {
		#do some stuff and print back to $c#
		close $c;
	}	
}

close($socket);

_____________________________________________________________


 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://zipcon.net/spug/





More information about the spug-list mailing list