| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Object::Remote::Connector::STDIO; |
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
use File::Spec; |
|
4
|
|
|
|
|
|
|
use IO::Handle; |
|
5
|
|
|
|
|
|
|
use Object::Remote::Connection; |
|
6
|
|
|
|
|
|
|
use Object::Remote::ReadChannel; |
|
7
|
|
|
|
|
|
|
use Moo; |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
sub connect { |
|
10
|
0
|
0
|
|
0
|
0
|
|
open my $stdin, '<&', \*STDIN or die "Duping stdin: $!"; |
|
11
|
0
|
0
|
|
|
|
|
open my $stdout, '>&', \*STDOUT or die "Duping stdout: $!"; |
|
12
|
0
|
|
|
|
|
|
$stdout->autoflush(1); |
|
13
|
|
|
|
|
|
|
# if we don't re-open them then 0 and 1 get re-used - which is not |
|
14
|
|
|
|
|
|
|
# only potentially bloody confusing but results in warnings like: |
|
15
|
|
|
|
|
|
|
# "Filehandle STDOUT reopened as STDIN only for input" |
|
16
|
0
|
0
|
|
|
|
|
close STDIN or die "Closing stdin: $!"; |
|
17
|
0
|
0
|
|
|
|
|
open STDIN, '<', File::Spec->devnull or die "Re-opening stdin: $!"; |
|
18
|
0
|
0
|
|
|
|
|
close STDOUT or die "Closing stdout: $!"; |
|
19
|
0
|
0
|
|
|
|
|
open STDOUT, '>', File::Spec->devnull or die "Re-opening stdout: $!"; |
|
20
|
0
|
|
|
|
|
|
return Object::Remote::Connection->new( |
|
21
|
|
|
|
|
|
|
send_to_fh => $stdout, |
|
22
|
|
|
|
|
|
|
read_channel => Object::Remote::ReadChannel->new(fh => $stdin) |
|
23
|
|
|
|
|
|
|
); |
|
24
|
|
|
|
|
|
|
} |
|
25
|
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
1; |