Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Perl] Не работает сокет асинхронно 11.06.06 16:45
Автор: Evanid Статус: Незарегистрированный пользователь
|
Перл 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" до тех пор, пока не будет что-нибуть считано в другом потоке.
|
|
|