1N/A#!./perl
1N/A
1N/ABEGIN {
1N/A unless(grep /blib/, @INC) {
1N/A chdir 't' if -d 't';
1N/A @INC = '../lib';
1N/A }
1N/A}
1N/A
1N/Ause Config;
1N/A
1N/ABEGIN {
1N/A if(-d "lib" && -f "TEST") {
1N/A my $reason;
1N/A if (! $Config{'d_fork'}) {
1N/A $reason = 'no fork';
1N/A }
1N/A elsif ($Config{'extensions'} !~ /\bSocket\b/) {
1N/A $reason = 'Socket extension unavailable';
1N/A }
1N/A elsif ($Config{'extensions'} !~ /\bIO\b/) {
1N/A $reason = 'IO extension unavailable';
1N/A }
1N/A elsif ($^O eq 'os2') {
1N/A require IO::Socket;
1N/A
1N/A eval {IO::Socket::pack_sockaddr_un('/foo/bar') || 1}
1N/A or $@ !~ /not implemented/ or
1N/A $reason = 'compiled without TCP/IP stack v4';
1N/A } elsif ($^O =~ m/^(?:qnx|nto|vos)$/ ) {
1N/A $reason = 'Not implemented';
1N/A }
1N/A if ($reason) {
1N/A print "1..0 # Skip: $reason\n";
1N/A exit 0;
1N/A }
1N/A }
1N/A}
1N/A
1N/A$PATH = "sock-$$";
1N/A
1N/A# Test if we can create the file within the tmp directory
1N/Aif (-e $PATH or not open(TEST, ">$PATH") and $^O ne 'os2') {
1N/A print "1..0 # Skip: cannot open '$PATH' for write\n";
1N/A exit 0;
1N/A}
1N/Aclose(TEST);
1N/Aunlink($PATH) or $^O eq 'os2' or die "Can't unlink $PATH: $!";
1N/A
1N/A# Start testing
1N/A$| = 1;
1N/Aprint "1..5\n";
1N/A
1N/Ause IO::Socket;
1N/A
1N/A$listen = IO::Socket::UNIX->new(Local=>$PATH, Listen=>0) || die "$!";
1N/Aprint "ok 1\n";
1N/A
1N/Aif($pid = fork()) {
1N/A
1N/A $sock = $listen->accept();
1N/A
1N/A if (defined $sock) {
1N/A print "ok 2\n";
1N/A
1N/A print $sock->getline();
1N/A
1N/A print $sock "ok 4\n";
1N/A
1N/A $sock->close;
1N/A
1N/A waitpid($pid,0);
1N/A unlink($PATH) || $^O eq 'os2' || warn "Can't unlink $PATH: $!";
1N/A
1N/A print "ok 5\n";
1N/A } else {
1N/A print "# accept() failed: $!\n";
1N/A for (2..5) {
1N/A print "not ok $_ # accept failed\n";
1N/A }
1N/A }
1N/A} elsif(defined $pid) {
1N/A
1N/A $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
1N/A
1N/A print $sock "ok 3\n";
1N/A
1N/A print $sock->getline();
1N/A
1N/A $sock->close;
1N/A
1N/A exit;
1N/A} else {
1N/A die;
1N/A}