5 use Time::HiRes qw(sleep);
7 @ARGV==5 or die "$0 <hostname> <port> <string> <timeout> <tries>";
8 my($hostname,$port,$string,$timeout,$tries)=@ARGV;
11 return localtime()." PID=$$ #$try: ";
13 for $try (1..$tries) {
14 warn ts()."connect($hostname,$port)...\n";
15 my $sock=IO::Socket::INET6->new(
17 "PeerAddr"=>$hostname,
23 warn ts()."connect($hostname,$port)=$e=$!";
24 sleep $timeout if $e!=ETIMEDOUT;
27 warn ts()."connect($hostname,$port): done.\n";
32 vec($rin,fileno($sock),1)=1;
33 my($nfound,$timeleft)=select($rin,"",$rin,$remains);
34 die "select nfound=$nfound: $!" if $nfound<0;
35 die "select timeleft=$timeleft" if $timeleft<0;
38 $remains==0 or die "remains=$remains";
42 my $got=sysread $sock,$c,1;
45 warn ts()."sysread: $!";
49 warn ts()."sysread: EOF";
53 $got==1 or die "sysread=$got!=1";
54 length($c)==1 or die "sysread->c=".length($c)."!=1";
57 last if length($buf)>=length($string);
58 # warn ts()."remains=<$remains> buf=<$buf>\n";
61 close $sock or warn ts()."close: $!";
62 if ($buf eq $string) {
67 warn ts()."buf=<$buf>, sleep $remains";
68 sleep $remains or warn ts()."sleep=$!";