Tengo un programilla que abre 2 threads: uno de ellos abre un socket a la espera de conexiones y el otro esta conectado a un servidor IRC.
Al hilo que está escuchando del socket le hago un fork para que pueda tener más de una conexión simultánea.
¿Cuál es el problema? Lanzo el programa, todo OK. Hago una conexión al hilo que escucha, OK; pero cuando cierro esta conexión y abro otra, se cae el hilo que está conectado al IRC.
Este es el código del hilo que abre el socket.
Using perl Syntax Highlighting
sub sub2 {
$server = IO::Socket::INET->new( Proto => 'tcp',
LocalPort => 9999,
Listen => 10,
Reuse => 1);
die "Error server" unless $server;
print "[Server $0 Aceptando clientes]\n";
my $client;
while ( $client = $server->accept()) {
$client->autoflush(1);
my $child;
die "Error en fork $!" unless defined ($child = fork());
if ($child == 0) {
my $hostinfo = gethostbyaddr($client->peeraddr);
printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
$server -> close();
funcion($client);
exit 0;
}else {
warn "Conexion recibida ... ", $client->peerhost,"\n";
$client -> close();
}
print ("Se acaba el mundo aki\n");
}
}
$server = IO::Socket::INET->new( Proto => 'tcp',
LocalPort => 9999,
Listen => 10,
Reuse => 1);
die "Error server" unless $server;
print "[Server $0 Aceptando clientes]\n";
my $client;
while ( $client = $server->accept()) {
$client->autoflush(1);
my $child;
die "Error en fork $!" unless defined ($child = fork());
if ($child == 0) {
my $hostinfo = gethostbyaddr($client->peeraddr);
printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
$server -> close();
funcion($client);
exit 0;
}else {
warn "Conexion recibida ... ", $client->peerhost,"\n";
$client -> close();
}
print ("Se acaba el mundo aki\n");
}
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
P.D - No conocía este foro y ahora ya es uno de mis favoritos