The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




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

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру