The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Чтение из сокета по ссылке"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Чтение из сокета по ссылке"  +/
Сообщение от localhorst (ok) on 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(.*)$, но не остальные.

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

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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