🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #14031

Re: Servidor TCP en Perl

#14031
From: Dani Pardo
Date: Thu, 21 Dec 2000 09:42
83 lines
3266 bytes

"Jos� Luis P�rez Diez" wrote:
> 
> In article <3A3F25B5.936991B3@enpl.es>, Dani Pardo wrote:
> > Tengo un servidor TCP en perl, que hace de "echo" de lo que le envias.
> >  La cosa funciona bien si hay una sola conexi�n, pero si hay 2
> > conexiones concurrentes, la segunda se queda esperando a que finalize la
> > primera.
> >  En principio esto no es problema por el problema que tengo que
> > resolver. El caso es que si la primera conexi�n se queda en CLOSE_WAIT o
> > algo asi, los dem�s clientes no pueden hacer nada, y es como si el
> > servicio estuviese inactivo.
> >   C�mo podria modificar el programa para que sirviese m�ltiples
> > conexiones a la vez?
> >
> 
> haz proceso hijo con fork por ejeplo para cada nueva conexion entrante una cosa
> asi
> #!/usr/bin/perl

	Ok, gracias, al final tengo esto (usando IO::Socket):
--------------------------------------------------------------------
#!/usr/bin/perl -w

#use strict;
use IO::Socket;

my $dades;
my ($client,$server);      # Els socket handles
my $LlistaClients;

$server= IO::Socket::INET->new(LocalPort => 4114,
                    Type => SOCK_STREAM,
                    Reuse => 1,
                    Listen => 10) or die "No puc obrir socket al port
4114\n";

print "Escoltant al port 4114...\n";

while($client=$server->accept())
{
 # Afegim $client a la @LlistaClients
 if ($pid=fork())
 {
  # Parent
  close($client);
 }
 else
 {
  # Child

  while($client->recv($dades_rebudes,20))
   {
     if($dades_rebudes=~/quit/i)
       {
        #shutdown($client,2);
        $client->close();
        exit(0);
       }
     else
       {
        printf("%s\n",$dades_rebudes);
        $client->send($dades_rebudes);
       }
   }
 }

}

------

 Lo que he visto, es que el servidor queda con el socket en TIME_WAIT...
y no s� si eso es malo (creo que no). Cuando se acaban los datos a
enviar/recibir, tanto el padre como el hijo han hecho close() del
socket.. as� que no s� si deberia quedar en TIME_WAIT..

 
 Bueno, gracias por la info. :)

---
Dani Pardo, dani@enpl.es
Enplater s.a
Technical Details
Message-ID: <3A41D083.3F0A61D9@enpl.es>
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!216.227.56.88.MISMATCH!telocity-west!TELOCITY!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.skycache.com!Cidera!newsfeed.comtenidos.com!m2newsfeed.uni2.es!lola!lola.ctv.es!calix.enpl.es!nobody
References: <3A3F25B5.936991B3@enpl.es> <VA.00000141.00440303@noemai.com>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,cd63928546b03ad0
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2000-12-21 04:34:15 PST
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!216.227.56.88.MISMATCH!telocity-west!TELOCITY!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.skycache.com!Cidera!newsfeed.comtenidos.com!m2newsfeed.uni2.es!lola!lola.ctv.es!calix.enpl.es!nobody
From: Dani Pardo <dani@enpl.es>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Servidor TCP en Perl
Date: Thu, 21 Dec 2000 10:42:27 +0100
Organization: CTV/JET
Lines: 83
Message-ID: <3A41D083.3F0A61D9@enpl.es>
References: <3A3F25B5.936991B3@enpl.es> <VA.00000141.00440303@noemai.com>
NNTP-Posting-Host: ctv21225138066.ctv.es
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: lola.ctv.es 977401774 4673 212.25.138.66 (21 Dec 2000 12:29:34 GMT)
X-Complaints-To: usenet@lola.ctv.es
NNTP-Posting-Date: 21 Dec 2000 12:29:34 GMT
To: Jluis@noEmai.com
X-Mailer: Mozilla 4.61 [en] (Win98; I)
X-Accept-Language: en