[Ruby] двунаправленный пайп
vic ismakaev
viclists at mail.esoo.ru
Tue Apr 22 16:30:30 MSD 2003
22 Апрель 2003 16:06, Ihar Viarheichyk написал:
> On Tue, Apr 22, 2003 at 02:56:31PM +0600, vic ismakaev wrote:
> > Приветствую!
> > Постараюсь объяснить свою задачу:
> > Есть некий TCPserver с телнет-подобным пртоколом(вернее я его пытаюсь
> > реализовать).
> > Когда я к нему цепляюсь через сокет,он мне отдает поток данных(счетчик
> > чего-нибудь) в цикле loop вида
> > loop {
> > sleep 10
> > @sock.write("Bla-bla-bla" + "\n")
> >
> > }
> > Эти данные я могу клиентом отловить и обрабботать.
> > Но при таком подходе у меня полчаеться бесконечный цикл и прервать его
> > можно только прибитием клиента или сервера или таймаутом.
> > Мне же хочеться получить двунаправленный пайп,чтобы клиент мог послать
> > какую-нибудь команду серверу для смены его поведения(прервать поток
> > данных,обнулить его,разорвать соединение и т.д).
> > Можно так сделать?
> >
> > Честно говоря,открывать второй сокет для команд очень не хочеться.
>
> Ну тогда нужно смотреть Kernel#select
>
> loop do
> res = select([@sock], [], [], 10)
> if res
> cmd = @sock.read
> .
> .
> .
> else
> @sock.write("Bla-bla-bla\n")
> end
> end
Спасибо.Помогло.
Только почему-то cmd = @sock.read не проходит.Вместо этого сделал cmd =
@sock.sysread(20) - с линукса вводиться построчно(нормально),с В2К -
посимвольно,в результате чего не могу вести ни одной команды.
Я ,правда,в качетсве основы использую tserver.rb,он и создает @sock.Может в
нем все дело.
--
С уважением
Виктор В Исмакаев
More information about the Ruby
mailing list