5 use Time::HiRes qw(sleep);
6 @ARGV==5 or die "$0 <hostname> <port> <string> <timeout> <tries>";
7 my($hostname,$port,$string,$timeout,$tries)=@ARGV;
8 for our $try (1..$tries) {
10 return localtime()." PID=$$ #$try: ";
12 warn ts()."connect($hostname,$port)...\n";
13 my $sock=IO::Socket::INET6->new(
15 "PeerAddr"=>$hostname,
19 warn ts()."connect($hostname,$port)=$!";
23 warn ts()."connect($hostname,$port): done.\n";
28 vec($rin,fileno($sock),1)=1;
29 my($nfound,$timeleft)=select($rin,"",$rin,$remains);
30 die "select nfound=$nfound: $!" if $nfound<0;
31 die "select timeleft=$timeleft" if $timeleft<0;
34 $remains==0 or die "remains=$remains";
38 my $got=sysread $sock,$c,1;
41 warn ts()."sysread: $!";
45 warn ts()."sysread: EOF";
49 $got==1 or die "sysread=$got!=1";
50 length($c)==1 or die "sysread->c=".length($c)."!=1";
53 last if length($buf)>=length($string);
54 # warn ts()."remains=<$remains> buf=<$buf>\n";
57 close $sock or warn ts()."close: $!";
58 if ($buf eq $string) {
63 warn ts()."buf=<$buf>, sleep $remains";
64 sleep $remains or warn ts()."sleep=$!";