Perl: перенаправить два сокета друг в друга - PullRequest
0 голосов
/ 04 ноября 2011

Вот что я хочу сделать:

  • создать два сокета S1 и S2
  • перенаправить выход S1 на вход S2
  • перенаправитьвывод S2 на вход S1

В C я хотел бы взглянуть где-нибудь вокруг "dup2" и других, но я действительно не знаю, как я могу это сделать в Perl.

1 Ответ

0 голосов
/ 04 ноября 2011

Посмотрите документацию для open() - все функции dup() могут быть выполнены с помощью open - например ::

open(my $fh2, '<&=', $fh1); # makes $fh2 a dup of file handle $fh1

С другой стороны, я думаю, что вы можете достичь своей цели, проводя различие между дескрипторами чтения и дескрипторами записи. То есть, в вашем коде не используйте один и тот же дескриптор сокета для чтения и записи - используйте разные переменные / члены / параметры экземпляра для указания дескриптора чтения и дескриптора записи. Пример - вместо:

sub foo {
  my ($sock) = @_;
  my $x = <$sock>;
  ...
  print {$sock} ...;
}

напишите свой код так:

sub foo {
  my ($rh, $wh) = @_;
  my $x = <$rh>;   # use $rh for reading
  ...
  print {$wh} ...; # use $wh for writing
}

Тогда, если вы действительно можете использовать тот же сокет, вы звоните foo с foo($sock, $sock). Однако, если вы хотите использовать два разных сокета, вы можете сделать это с помощью foo($s1, $s2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...