xref: /openbsd-src/gnu/usr.bin/perl/t/io/socketpair.t (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
15759b3d2Safresh1#!./perl
25759b3d2Safresh1
35759b3d2Safresh1BEGIN {
45759b3d2Safresh1    chdir 't' if -d 't';
55759b3d2Safresh1    require './test.pl';
65759b3d2Safresh1    set_up_inc('../lib');
7*5486feefSafresh1    require Config; Config->import;
85759b3d2Safresh1    skip_all_if_miniperl();
95759b3d2Safresh1    for my $needed (qw(d_socket)) {
105759b3d2Safresh1	if ($Config{$needed} ne 'define') {
115759b3d2Safresh1	    skip_all("-- \$Config{$needed} undefined");
125759b3d2Safresh1	}
135759b3d2Safresh1    }
145759b3d2Safresh1    unless ($Config{extensions} =~ /\bSocket\b/) {
155759b3d2Safresh1	skip_all('-- Socket not available');
165759b3d2Safresh1    }
175759b3d2Safresh1}
185759b3d2Safresh1
195759b3d2Safresh1use strict;
205759b3d2Safresh1use IO::Handle;
215759b3d2Safresh1use Socket;
225759b3d2Safresh1
235759b3d2Safresh1{
245759b3d2Safresh1    socketpair(my $a, my $b, PF_UNIX, SOCK_STREAM, 0)
255759b3d2Safresh1	or skip_all("socketpair() for PF_UNIX failed ($!)");
265759b3d2Safresh1}
275759b3d2Safresh1
285759b3d2Safresh1plan(tests => 8);
295759b3d2Safresh1
305759b3d2Safresh1{
315759b3d2Safresh1    my($a, $b);
325759b3d2Safresh1    ok socketpair($a, $b, PF_UNIX, SOCK_STREAM, 0), "create socket pair";
335759b3d2Safresh1    ok($a->printflush("aa\n"), "write one way");
345759b3d2Safresh1    ok($b->printflush("bb\n"), "write other way");
355759b3d2Safresh1    is(readline($b), "aa\n", "read one way");
365759b3d2Safresh1    is(readline($a), "bb\n", "read other way");
375759b3d2Safresh1    ok(close $a, "close one end");
385759b3d2Safresh1    ok(close $b, "close other end");
395759b3d2Safresh1}
405759b3d2Safresh1
415759b3d2Safresh1SKIP: {
425759b3d2Safresh1    skip "no fcntl", 1 unless $Config{d_fcntl};
435759b3d2Safresh1    my($a, $b);
445759b3d2Safresh1    socketpair($a, $b, PF_UNIX, SOCK_STREAM, 0) or die "socketpair: $!";
455759b3d2Safresh1    my $fda = fileno($a);
465759b3d2Safresh1    my $fdb = fileno($b);
475759b3d2Safresh1    fresh_perl_is(qq(
485759b3d2Safresh1	print open(F, "+<&=$fda") ? 1 : 0, "\\n";
495759b3d2Safresh1	print open(F, "+<&=$fdb") ? 1 : 0, "\\n";
505759b3d2Safresh1    ), "0\n0\n", {}, "sockets not inherited across exec");
515759b3d2Safresh1}
52