diff options
Diffstat (limited to 't/lib/io_sock.t')
-rwxr-xr-x | t/lib/io_sock.t | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/t/lib/io_sock.t b/t/lib/io_sock.t index 156f6cb78f..c3701c5655 100755 --- a/t/lib/io_sock.t +++ b/t/lib/io_sock.t @@ -1,14 +1,22 @@ #!./perl BEGIN { - chdir 't' if -d 't'; - @INC = '../lib' if -d '../lib'; - require Config; import Config; - if ( ($Config{'extensions'} !~ /\bSocket\b/ || - $Config{'extensions'} !~ /\bIO\b/) && - !(($^O eq 'VMS') && $Config{d_socket})) { - print "1..0\n"; - exit 0; + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib' if -d '../lib'; + } +} + +use Config; + +BEGIN { + if(-d "lib" && -f "TEST") { + if ( ($Config{'extensions'} !~ /\bSocket\b/ || + $Config{'extensions'} !~ /\bIO\b/) && + !(($^O eq 'VMS') && $Config{d_socket})) { + print "1..0\n"; + exit 0; + } } } @@ -17,24 +25,15 @@ print "1..5\n"; use IO::Socket; -srand(time); -$port = 4002 + int(rand 0xff); -print "# using port $port.\n"; -$SIG{ALRM} = sub {}; - -$pid = fork(); - -if($pid) { +$listen = IO::Socket::INET->new(Listen => 2, + Proto => 'tcp', + ) or die "$!"; - $listen = IO::Socket::INET->new(Listen => 2, - Proto => 'tcp', - LocalPort => $port - ) or die "$!"; +print "ok 1\n"; - print "ok 1\n"; +$port = $listen->sockport; - # Wake out child - kill(ALRM => $pid); +if($pid = fork()) { $sock = $listen->accept(); print "ok 2\n"; @@ -49,12 +48,8 @@ if($pid) { waitpid($pid,0); print "ok 5\n"; -} elsif(defined $pid) { - - # Wait for a small pause, so that we can ensure the listen socket is setup - # the parent will awake us with a SIGALRM - sleep(10); +} elsif(defined $pid) { $sock = IO::Socket::INET->new(PeerPort => $port, Proto => 'tcp', @@ -62,9 +57,13 @@ if($pid) { ) or die "$!"; $sock->autoflush(1); + print $sock "ok 3\n"; + print $sock->getline(); + $sock->close; + exit; } else { die; |