home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / t / lib / io_unix.t < prev    next >
Text File  |  2000-03-20  |  2KB  |  90 lines

  1. #!./perl
  2.  
  3. BEGIN {
  4.     unless(grep /blib/, @INC) {
  5.         chdir 't' if -d 't';
  6.         unshift @INC, '../lib' if -d '../lib';
  7.     }
  8. }
  9.  
  10. use Config;
  11.  
  12. BEGIN {
  13.     if(-d "lib" && -f "TEST") {
  14.     my $reason;
  15.     if (! $Config{'d_fork'}) {
  16.         $reason = 'no fork';
  17.     }
  18.     elsif ($Config{'extensions'} !~ /\bSocket\b/) {
  19.         $reason = 'Socket extension unavailable';
  20.     }
  21.     elsif ($Config{'extensions'} !~ /\bIO\b/) {
  22.         $reason = 'IO extension unavailable';
  23.     }
  24.     elsif ($^O eq 'os2') {
  25.         require IO::Socket;
  26.  
  27.         eval {IO::Socket::pack_sockaddr_un('/tmp/foo') || 1}
  28.           or $@ !~ /not implemented/ or
  29.         $reason = 'compiled without TCP/IP stack v4';
  30.     } elsif ($^O eq 'qnx') {
  31.         $reason = 'Not implemented';
  32.     }
  33.     undef $reason if $^O eq 'VMS' and $Config{d_socket};
  34.     if ($reason) {
  35.         print "1..0 # Skip: $reason\n";
  36.         exit 0;
  37.         }
  38.     }
  39. }
  40.  
  41. $PATH = "/tmp/sock-$$";
  42.  
  43. # Test if we can create the file within the tmp directory
  44. if (-e $PATH or not open(TEST, ">$PATH") and $^O ne 'os2') {
  45.     print "1..0 # Skip: cannot open '$PATH' for write\n";
  46.     exit 0;
  47. }
  48. close(TEST);
  49. unlink($PATH) or $^O eq 'os2' or die "Can't unlink $PATH: $!";
  50.  
  51. # Start testing
  52. $| = 1;
  53. print "1..5\n";
  54.  
  55. use IO::Socket;
  56.  
  57. $listen = IO::Socket::UNIX->new(Local=>$PATH, Listen=>0) || die "$!";
  58. print "ok 1\n";
  59.  
  60. if($pid = fork()) {
  61.  
  62.     $sock = $listen->accept();
  63.     print "ok 2\n";
  64.  
  65.     print $sock->getline();
  66.  
  67.     print $sock "ok 4\n";
  68.  
  69.     $sock->close;
  70.  
  71.     waitpid($pid,0);
  72.     unlink($PATH) || $^O eq 'os2' || warn "Can't unlink $PATH: $!";
  73.  
  74.     print "ok 5\n";
  75.  
  76. } elsif(defined $pid) {
  77.  
  78.     $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
  79.  
  80.     print $sock "ok 3\n";
  81.  
  82.     print $sock->getline();
  83.  
  84.     $sock->close;
  85.  
  86.     exit;
  87. } else {
  88.  die;
  89. }
  90.