or $@ !~ /not implemented/ or
$reason = 'compiled without TCP/IP stack v4';
}
- elsif ($^O =~ m/^(?:qnx|nto|vos)$/ ) {
- $reason = 'Not implemented';
+ elsif ($^O =~ m/^(?:qnx|nto|vos|MSWin32)$/ ) {
+ $reason = "UNIX domain sockets not implemented on $^O";
}
elsif (! $Config{'d_fork'}) {
$reason = 'no fork';
$PATH = "sock-$$";
+if ($^O eq 'os2') { # Can't create sockets with relative path...
+ require Cwd;
+ my $d = Cwd::cwd();
+ $d =~ s/^[a-z]://i;
+ $PATH = "$d/$PATH";
+}
+
# Test if we can create the file within the tmp directory
if (-e $PATH or not open(TEST, ">$PATH") and $^O ne 'os2') {
print "1..0 # Skip: cannot open '$PATH' for write\n";
use IO::Socket;
-$listen = IO::Socket::UNIX->new(Local=>$PATH, Listen=>0) || die "$!";
+$listen = IO::Socket::UNIX->new(Local => $PATH, Listen => 0);
+
+# Sometimes UNIX filesystems are mounted for security reasons
+# with "nodev" option which spells out "no" for creating UNIX
+# local sockets. Therefore we will retry with a File::Temp
+# generated filename from a temp directory.
+unless (defined $listen) {
+ eval { require File::Temp };
+ unless ($@) {
+ import File::Temp 'mktemp';
+ for my $TMPDIR ($ENV{TMPDIR}, "/tmp") {
+ if (defined $TMPDIR && -d $TMPDIR && -w $TMPDIR) {
+ $PATH = mktemp("$TMPDIR/sXXXXXXXX");
+ last if $listen = IO::Socket::UNIX->new(Local => $PATH,
+ Listen => 0);
+ }
+ }
+ }
+ defined $listen or die "$PATH: $!";
+}
print "ok 1\n";
if($pid = fork()) {