URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9147
[ Назад ]

Исходное сообщение
"Чтение из сокета по ссылке"

Отправлено localhorst , 26-Май-11 13:20 
Код:

#!/usr/local/bin/perl

use warnings;
use strict;
use IO::Socket;

our $sock = new IO::Socket::INET(PeerAddr => $server,
                                PeerPort => $port,
                                Proto => 'tcp') or die "Can't connect\n";

our $slink = \$sock;
                                    
while (my $input = <$sock>) {
    chomp $input;
    $input =~ s/(\r|\n)//gs;
    if ($input =~ /^DATA(.*)$/i) {
        sock_data_work($input);
    }
}

sub sock_data_work {
...
if (...) {
   print $sock "line\n";
   while (my $inp =<$$slink>) {
      ....
   }
}
}


Суть: есть скрипт, слушающий сокет и обрабатывающий приходящие данные. При наступлении условия вызывается функция sock_data_work, которой передаются все данные из сокета, подхлдящие под регулярку. Внутри этой функции я хочу получить доступ ко всем данным сокета.
Если пробовать в лоб - while (my $inp = <$sock>) - то есть слушать тот же сокет по тому же объекту - в $inp приходят только те данные, которые удовлетворяют регулярке ^DATA(.*)$, но не остальные.

По ссылке как выше - не работает в принципе.

Подскажите, как организовать что-то подобное.


Содержание

Сообщения в этом обсуждении
"Чтение из сокета по ссылке"
Отправлено NuINu , 28-Май-11 18:06 
> Суть: есть скрипт, слушающий сокет и обрабатывающий приходящие данные. При наступлении
> условия вызывается функция sock_data_work, которой передаются все данные из сокета, подхлдящие
> под регулярку. Внутри этой функции я хочу получить доступ ко всем
> данным сокета.
> Если пробовать в лоб - while (my $inp = <$sock>) - то
> есть слушать тот же сокет по тому же объекту - в
> $inp приходят только те данные, которые удовлетворяют регулярке ^DATA(.*)$, но не
> остальные.

ну не может этого быть, смотрите свой код, когда у вас выполняется ДАТА вы сваливаетесь в процедуру которая читает весь ваш ввод, оставшийся! может ваш иф не выполняется? что вы еще хотите получить? к каким "всем данным" вы хотите получить доступ?
еще раз сформурируйте вопрос.

> По ссылке как выше - не работает в принципе.

ссылк не ссылка не важно.
не работает ссылка, разыменуйте ее в процедуре и получите не ссылку.