【发布时间】:2013-03-02 15:47:21
【问题描述】:
我正在尝试将来自 Perl 程序的开放 TCP 套接字连接作为标准输入和标准输出传递到 Windows 上的外部应用程序,类似于 Unix 世界中的 inetd 所做的。
我尝试过的:
-
使用
open或POSIX::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。在 Windows 上,select 仅适用于套接字。
如何将套接字传递给外部应用程序?
顺便说一下,我使用的是 Strawberry Perl,而不是 ActiveState。
【问题讨论】:
标签: windows perl sockets strawberry-perl