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/ 

Reply via email to