LINUX.ORG.RU

perl Socket


0

0

Кусок кода частично заимствованный из perlipc:

for ( ; $paddr = accept(CLIENT_H, SERVER_H); close CLIENT_H)
{
        print CLIENT_H "Test",$EOL;
        while (<CLIENT_H>)
        {
                if ($_ eq "switch") {
                       print CLIENT_H "$_",$EOL;
                }
         }
}

Вот если while закомнтировать то при подключении строка Test выдается клиенту.
А если так как есть - то нет(Можно объянить почему?? или линк дать и как это исправить???). 
Вообщем нужно чтоб клиент вводил команды, а сервер ему отвечал....
★★

А как будет работать, если сделать так:

select(select(SERVER_H), $| = 1);
for ( ; $paddr = accept(CLIENT_H, SERVER_H); close CLIENT_H)
{
        select(select(CLIENT_H), $| = 1);
        print CLIENT_H "Test",$EOL;
        while (<CLIENT_H>)
        {
                if ($_ eq "switch") {
                       print CLIENT_H "$_",$EOL;
                }
         }
}

Ещё вопрос, что находится в $EOL? Есть подозрение, что для выполнения 
$_ eq "switch" надо сначала конец строки отрезать.

Casus ★★★★★
()

Попробуй отключить буферизацию, поставь вначале $|=1.

anonymous
()
Ответ на: комментарий от Casus

2Casus && anonymous:
10x. Помогло.
заработало вот по такой схеме:
select(SERVER_H); $|=1;
for ( ; $paddr = accept(CLIENT_H, SERVER_H); close CLIENT_H) 
{
        select(CLIENT_H); $|=1;
......................


select(select(SERVER_H), $| = 1);
так не хотело, говорило что у select не может быть два параметра.

Да и подозрение оправдалось. чтобы нормально сравнивать 
сделал chomp;

tugrik ★★
() автор топика
Ответ на: комментарий от anonymous

хм...
$|=1;
for ( ; $paddr = accept(CLIENT_H, SERVER_H); close CLIENT_H)
{
        $|=1;

не работает однако...

tugrik ★★
() автор топика
Ответ на: комментарий от tugrik

> так не хотело, говорило что у select не может быть два параметра.

Я тормознул, надо было так:

select((select(SERVER_H), $| = 1)[0]);

данный select как раз указывает к какому потоку будет применяться $|=1

Casus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.