...(set up socket)... my $end = time + 15*60; my $rin; vec($rin, fileno($hSocket), 1) = 1; while (1) { my $timeleft = $end - time; last if ($timeleft <= 0); my ($nfound, $t) = select(my $rout = $rin, undef, undef, $timeleft); last if ($nfound == 0); # either timeout or end of file # read from socket here }