我正在尝试将来自 Perl 程序的开放 TCP 套接字连接作为标准输入和标准输出传递到 Windows 上的外部应用程序,类似于 Unix 世界中的 inetd 所做的。
我试过的:
open
使用orPOSIX::dup2
并调用 exec通过套接字“替换”标准输入和标准输出:# $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
. 在 Windowsselect
上仅适用于套接字。
我该怎么做才能将套接字传递给外部应用程序?
顺便说一句,我使用的是草莓 Perl,而不是 ActiveState。