zavrenie socketu v threade

Roman Fordinal aben na webcom.sk
Úterý Únor 25 19:05:45 MET 2003


mam taky maly problem so socketmi v perli
pomocou kniznice use threads chcem dosiahnut toho aby som mohol mat viacero 
connectov naraz.
predtym som to robil pomocou fork(), ale to je momentalne pre mna uz 
nevyhovujuce
problem je, ze sa mi novy connect nezavre a akosi uz ani neviem ako to 
spravit.


#
$proto = getprotobyname('tpc');
socket(Se, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
setsockopt(Se, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))   || die "setsockopt: 
$!";
bind(Se, sockaddr_in($PORT, INADDR_ANY))  || die "bind:$!";
listen(Se,SOMAXCONN)    || die "listen: $!";

eval
 {
  my $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
  my $SIG{PIPE} = sub { die "pipe\n" }; # NB: \n required
  alarm 60; # cakam 60 sekund na prichodzi connect
  $paddr = accept(CLI,Se);
  alarm 0;
 };

 if ($@)
 {
# hups, nejaka chybicka :))
 }
 else
 {
  my($port,$iaddr) = sockaddr_in($paddr);
  my($name) = gethostbyaddr($iaddr,AF_INET);
  my($ip_klient)=inet_ntoa($iaddr);
  my $thread  = threads->create("tconn","argument");
 } 
}
close (Se);

sub tconn
{
   autoflush CLI 1;
   for (1..5)
   {
    print CLI "+$_\n";
    sleep 1;
   }
   close (CLI);
   # a tu sa nezavre, neviem preco :(((
}


Další informace o konferenci Perl