I would like to timeout this statement after about 15 secs
You want to set an alarm for 15 seconds, and attempt the connection in an eval block.
my $db; eval { local $SIG{ALRM} = sub { die "connect timeout\n" }; alarm 15; $db = DBI->connect("DBI:Oracle:".... ) or die $DBI::errstr; alarm 0; }; if ($@) { # timed out die unless $@ eq "connect timeout\n"; } elsif (!$db) { # didn't connect die "no database connection\n"; } # $db is ok here
If you're running on Win32, I believe you're out of luck, because alarm isn't implemented. Or it could be that it is now implemented in 5.8.8 and/or there's another technique that taps Win32::API to achieve the same functionality.
update: it looks like alarm is implemented in Active Perl build 819 (version 5.8.8) at least (don't know which exact version introduced this).
H:\>perl -wle "eval {$SIG{ALRM}=sub{die qq{ook\n}}; alarm(3); 1 while +1; alarm(0)}; print $@" ook
• another intruder with the mooring in the heart of the Perl
In reply to Re: Trap DB Connect
by grinder
in thread Trap DB Connect
by bitman
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |