#!./perl
BEGIN {
chdir
't'
if
-d
't'
;
require
'./test.pl'
;
set_up_inc(
'../lib'
);
require
Config; Config->
import
;
skip_all_if_miniperl();
for
my
$needed
(
qw(d_socket)
) {
if
(
$Config
{
$needed
} ne
'define'
) {
skip_all(
"-- \$Config{$needed} undefined"
);
}
}
unless
(
$Config
{extensions} =~ /\bSocket\b/) {
skip_all(
'-- Socket not available'
);
}
}
{
socketpair
(
my
$a
,
my
$b
, PF_UNIX, SOCK_STREAM, 0)
or skip_all(
"socketpair() for PF_UNIX failed ($!)"
);
}
plan(
tests
=> 8);
{
my
(
$a
,
$b
);
ok
socketpair
(
$a
,
$b
, PF_UNIX, SOCK_STREAM, 0),
"create socket pair"
;
ok(
$a
->printflush(
"aa\n"
),
"write one way"
);
ok(
$b
->printflush(
"bb\n"
),
"write other way"
);
is(
readline
(
$b
),
"aa\n"
,
"read one way"
);
is(
readline
(
$a
),
"bb\n"
,
"read other way"
);
ok(
close
$a
,
"close one end"
);
ok(
close
$b
,
"close other end"
);
}
SKIP: {
skip
"no fcntl"
, 1
unless
$Config
{d_fcntl};
my
(
$a
,
$b
);
socketpair
(
$a
,
$b
, PF_UNIX, SOCK_STREAM, 0) or
die
"socketpair: $!"
;
my
$fda
=
fileno
(
$a
);
my
$fdb
=
fileno
(
$b
);
fresh_perl_is(
qq(
print open(F, "+<&=$fda")
? 1 : 0,
"\\n"
;
print
open
(F,
"+<&=$fdb"
) ? 1 : 0,
"\\n"
;
),
"0\n0\n"
, {},
"sockets not inherited across exec"
);
}