Thanks for the reply Tony - much appreciated. I've had this happen before with the C mysql lib. The library handled the alarm signal internally somehow. The only way to timeout the query was to use fork(2) and select(2) - way too complex for the perl process I'm using.
I wonder if the mysql server can be configured to keepalive the connection or if my client can ping the server every so often. Will post my results anayway. Chri --- Tony Adolph <[EMAIL PROTECTED]> wrote: > Hi Chris, > > I've seen this problem before but connecting to an > Oracle DB. I wasn't > directly involved so at the time, but I believe that > we found some > documention that says that alarm is not guartenteed > to respond "on time" on > a busy system. In our case a 5 seconds wait came > back over an hour later, > so the application just hung. > > I've emailed my work mate to find out if he found a > work around. Perhaps a > post on perl monks is what's required here. > > HTH > Cheers > Tony > > >From: Chris Masters <[EMAIL PROTECTED]> > >To: [email protected] > >Subject: Re: hang with mysql in execute > >Date: Wed, 23 Mar 2005 02:09:40 -0800 (PST) > > > >Is the lack of response because this is a stupid > >question related to an extensively documented > problem > >or does no one else have experience of this issue? > > > >Anyone? > > > >Thanks, Chris > > > > > >--- Chris Masters <[EMAIL PROTECTED]> wrote: > > > Hi All, > > > > > > A firewall is terminating my connection with a > mysql > > > database after a period of inactivity. I've used > the > > > following code (with ref to cpan docs and > connect) > > > and > > > it still causes a hang. > > > > > > > ################################################### > > > > > > my $result = 0; > > > my $alarm = 0; > > > eval > > > { > > > #set alarm to timeout query hangs > > > my $h = Sys::SigAction::set_sig_handler( > 'ALRM' > > > ,sub { $alarm = 1; } ); > > > alarm(2); > > > > > > my $sth = $dbh->prepare("SELECT 1"); > > > $sth->execute(); > > > $result = 1; > > > > > > alarm(0); > > > }; > > > > > > alarm(0); > > > > > > if($@ || $alarm) > > > { > > > syslog('err',"execute error: $@"); > > > $result = 0; > > > } > > > > > > return $result; > > > > > > ############################################### > > > > > > Am I using alarms wrongly with perl? > > > > > > Would it be better to use a select(2) wrapper? > > > > > > Any other ideas to prevent this hang? > > > > > > Thanks for any help on this. > > > > > > Chris > > > > > > redhat 8.0 > > > perl-5.8.0-88.3 > > > perl-DBI-1.30-1 > > > perl-DBD-MySQL-2.1017-3 > > > > > > > > > > > > __________________________________ > > > Do you Yahoo!? > > > Yahoo! Small Business - Try our new resources > site! > > > http://smallbusiness.yahoo.com/resources/ > > > > > > > > > > >__________________________________ > >Do you Yahoo!? > >Make Yahoo! your home page > >http://www.yahoo.com/r/hs > > _________________________________________________________________ > Express yourself instantly with MSN Messenger! > Download today it's FREE! > http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ > > __________________________________ Do you Yahoo!? Yahoo! Small Business - Try our new resources site! http://smallbusiness.yahoo.com/resources/
