В Perl, учитывая два IO :: Socket, как мне подключить вход 1-го разъема к выходу 2-го и наоборот? - PullRequest
2 голосов
/ 06 мая 2010

Предположим, я установил два соединения в Perl с помощью IO::Socket. Первый имеет сокет $s1, а второй - сокет $s2.

Любые идеи, как их соединить, чтобы все, что получено от $s1, было отправлено на $s2, а то, что получено от $s2, отправлено на $s1?

Я не могу понять, как это сделать. Я не знаю, как их соединить. Я ожидал бы сделать что-то вроде $s1->stdin = $s2->stdout и $s2->stdin = $s1->stdout, но в Perl таких конструкций нет.

Пожалуйста, помогите мне!

Спасибо, Бода Чидо.

Ответы [ 2 ]

6 голосов
/ 06 мая 2010

Если вы имеете дело с двоичными данными, вам необходимо знать, какой размер фрагментов нужно читать и записывать.Допустим, вы имеете дело с 512-байтовыми блоками:

my $buffer;
while (read $s1 => $buffer, 512) { # read up to 512 bytes
    print $s2 $buffer;
} 

Я не уверен, что pipe работает с сокетами, но если так:

pipe $s1 => $s2;
pipe $s2 => $s1;

"может" работать.У меня нет большого опыта работы с функцией pipe.

Редактировать:

Как упоминалось в комментарии, вы, кажется, пытаетесь создать HTTP-прокси.CPAN уже имеет несколько модулей, которые могут сделать это для вас.Появляется быстрый поиск:

2 голосов
/ 06 мая 2010

Как насчет

$s2->print( $_ ) while <$s1>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...