Unix の世界の inetd と同様に、Perl プログラムから Windows の外部アプリケーションに stdin および stdout として開いている TCP ソケット接続を渡そうとしています。
私が試したこと:
open
またはPOSIX::dup2
execを使用して、ソケットで stdin と stdout を「置換」します。# $socket is an open TCP socket open STDIN, '<&', $socket or die "Unable to dup stdin: $^E"; open STDOUT, '>&', $socket or die "Unable to dup stdout: $^E"; close $socket; exec($program) or die "Unable to exec $command: $^E";
使用
IPC::open3
:my $pid = open3( '>&'.$socket->fileno, '<&'.$socket->fileno, '<&'.fileno(STDERR), $program); waitpid $pid, 0;
どちらの場合も、実行されたプログラムはソケットではないもの (おそらくパイプ?) を受け取りますselect
。Windows ではselect
、ソケットでのみ機能します。
ソケットを外部アプリケーションに渡すにはどうすればよいですか?
ちなみに私は ActiveState ではなく Strawberry Perl を使っています。