Pessoal estou com um problema quanto ao uso de sockets não bloqueadores que não estou conseguindo resolver.
Como podem ver no código abaixo o na craição do socket já está sando passado o parametro Blocking => 0 mas minha aplicação insiste em ficar presa na leiutura do socket impedindo que envie dados através dela.
Espero que alguém possa me ajudar!
se IO::Socket;
use IO::Select;
use IO::Handle;
use threads;
use threads::shared;
use Win32::Mutex;
if ($#ARGV < 0) {
print "Informe a porta que escutara as conexoes: "; $port_listen=<STDIN>;
} else {
$port_listen=$ARGV[0];
}
print "\nServidor sendo executado na porta $port_listen\n";
Pergunta
Fausto Lev
Iai pessoal, td numa boa?
Pessoal estou com um problema quanto ao uso de sockets não bloqueadores que não estou conseguindo resolver.
Como podem ver no código abaixo o na craição do socket já está sando passado o parametro Blocking => 0 mas minha aplicação insiste em ficar presa na leiutura do socket impedindo que envie dados através dela.
Espero que alguém possa me ajudar!
se IO::Socket;
use IO::Select;
use IO::Handle;
use threads;
use threads::shared;
use Win32::Mutex;
if ($#ARGV < 0) {
print "Informe a porta que escutara as conexoes: "; $port_listen=<STDIN>;
} else {
$port_listen=$ARGV[0];
}
print "\nServidor sendo executado na porta $port_listen\n";
$socket =IO::Socket::INET->new(LocalPort =>$port_listen,
Type => SOCK_STREAM,
Proto => 'tcp',
Listen => 5,
Reuse=> 1,
Blocking => 0 );
$socket->autoflush(1);
$| = 1;
$ss = IO::Select->new();
$ss -> add ($socket);
$mutex = Win32::Mutex->new(init,'mutex');
while(1) {
@connections_pending = $ss->can_read();
foreach (@connections_pending) {
$remote = accept($fh, $_);
($port,$iaddr) = sockaddr_in($remote);
$peeraddress = inet_ntoa($iaddr);
print "Conexao estabelecida com $peeraddress na porta $port.\n";
$t = threads->create(\&new_connection, $fh);
$t->detach();
close($fh);
}
}
#######################################################################################################
# Threads
#######################################################################################################
sub new_connection {
$fh = shift;
binmode $fh;
while ($request_line = <$fh>) {
#print $request_line, "\n";
chomp($request_line);
chop($request_line);
@parameters=split(/ /,$request_line);
if ($parameters[0] eq "Get_toc") {
$mutex->wait(0);
print $fh &send_toc();
print $fh "\r\n";
$mutex->release;
}elsif ($parameters[0] eq "Get_site") {
$mutex->wait(0);
print $fh send_content($parameters[1]);
print $fh "\r\n";
$mutex->release;
}elsif ($parameters[0] eq "Edit_site") {
$mutex->wait(0);
update_content($parameters[1],$parameters[2], $parameters[3]);
$mutex->release;
}elsif ($parameters[0] eq "Close") {
close($fh);
threads->exit;
}
}
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.