use Win32::Socketpair 'winopen2'; my ($pid, $socket) = winopen2(@cmd) or die "unable to run command @cmd"; my $fno = fileno $socket; my $v = ''; vec($v, $fno, 1) = 1; while(1) { my $vin = $v; my $vout = length $data ? $v : ''; if (select($vin, $vout, undef, undef)>0) { if (vec($vin, $fno, 1)) { sysread($socket, my $buffer, 2000) or last # closed } if (vec($vout, $fno, 1)) { syswrite($socket, $data) or last # closed } } } #### ioctl($socket, 0x8004667e, 1);