Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Установление постоянного соединения


Автор: kostofffan 3.8.2004, 00:52
Помогите, пожалуйста, с такой проблемкой. Пишу, значит так:
Код
my $sock = IO::Socket::INET->new(LocalAddr => 'localhost:100', Type => SOCK_STREAM, ReuseAddr => 1, Proto => 'tcp', Listen => 5);
my $cl = $sock->accept;
print "New ! \n";
while (defined($a = <$cl>)) { print $a; }


Далее приходится закрывать соединение и создавать сокет по новой. В итоге у меня получилось так:
Код
#!perl -w
use IO::Socket;
use IO::Select;
my $sock = IO::Socket::INET->new(LocalAddr => 'localhost:100', Type => SOCK_STREAM, ReuseAddr => 1, Proto => 'tcp', Listen => 5);
my $cl = $sock->accept;
print "New ! \n";
while (defined($a = <$cl>)) { print $a; }
$cl->close;
$cl = $sock->accept;
print $cl "Content-Type: text/plain\n\n1234455512333144412122334\n";
$cl->close;
<stdin>;


Никак не могу расчехлиться, в чем прикол. Хелп.

Спасибо!

Автор: achmed 3.8.2004, 09:05
не понял, а зачем закрывать $cl, после
Код

while (defined($a = <$cl>)) { print $a; }

можно после этого в него писать

в твоей программе данные читаются с блокировкой, т.е. пока
данные не поступят или клиент не разоавето соединение, программа не
выйдет из блока
Код

$a = <$cl>

нужно, либо анализировать данные, считываемые с сокета по ходу считывания
и всоевременно прекращать чтение, либо сделать неблокирующийй ввод-вывод
в сокете.



Автор: ElectricalStorm 3.8.2004, 10:03
читаем перлдок

http://www.perldoc.com/perl5.8.4/pod/perlipc.html#Sockets--Client-Server-Communication

Автор: kostofffan 3.8.2004, 23:00
ага, понял. Сенкс!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)