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