Перл 5.8
Открываю сокет, после чего создаю два потока в одном из которых читаю из него, а во втором пишу в него.
use Socket qw(:DEFAULT :crlf);
use threads;
use IO::Handle;
socket(CLIENT, AF_INET, SOCK_STREAM, $protocol) or die "socket() fail: $!\n";
connect(CLIENT,$dest_addr) or die "connect() fail: $!\n";
binmode CLIENT;
CLIENT->autoflush(1);
my $thread1 = threads->new(\&listen);
$thread1->detach();
my $thread2 = threads->new(\&ping);
$thread2->detach();
while(1){}
sub ping{
while(!$errorconnection){ sleep 10; print CLIENT "test";}
}
sub listen
{
$incomnigbytes=<CLIENT>;
while ($incomnigbytes){
#что-то делается
$incomnigbytes=<CLIENT>;
}
}
Проблема заключается в том что пока нечего считывать в сокет писать не хочет. Выполнение потока с пингом останавливается на отправке "test" до тех пор, пока не будет что-нибуть считано в другом потоке.