I need a very short time out as the application i'm using has mutiple
connects to the db per page so if the dbhost is down i need it timeout
quickly to ensure the page is returned quickly to the user. Otherwise the
page hangs for several secs.

The only solution i can see is ensuring that each page only has 1 connection
to the db (i know it should be like this anyway, but this is old code). As 1
x 1sec timeout is acceptable but 10 x 1 sec timeout is not.

Your correct that a combo of select/fork/kill will end up very messy so that
is not really an option.

Thanks again for you help Alexander

On 24/09/06, Alexander Foken <[EMAIL PROTECTED]> wrote:

http://search.cpan.org/src/CAPTTOFU/DBD-mysql-3.0007/dbdimp.c line 1309
and following, the value is converted to an int, then passed to
mysql_options(), which is a part of the mysql API. (Ignore the cast to
const char *, that's just how the mysql_options() API call is defined.)
Looking at http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html ,
there IS NO WAY to specify a timeout of less than one second.

It seems that you have to live with a minimum timeout of one second, as
alarm() also has only seconds resolution. The only way for a timeout of
less than one second is a combination of fork(), select(), kill() and a
custom signal handler, which is really, really ugly.

Let's try to solve the problem in an other way: Why do you need such a
short timeout?

Alexander

On 24.09.2006 12:23, Duncan Wren wrote:
> I have looked at the code for DBD::mysql and DBI.pm but cannot workout
> where
> the timeout is implemented or where the default is specified. Does
anyone
> know where this logic is implemented? I would rather make make the
> change in
> the module that currently implements the time out code than add some
> logic
> to add timeout in my application code.
>
> Duncan
>
> On 24/09/06, Alexander Foken <[EMAIL PROTECTED]> wrote:
>>
>> Without looking at the source code of DBD::mysql, I would quess that
the
>> mysql_connect_timeout parameter is an integer. 0.5 is rounded down to
0,
>> which is the same as not specifying mysql_connect_timeout at all. If
you
>> are on a Unix/POSIX System, alarm() and Signals may help.
>>
>> Alexander
>>
>> On 23.09.2006 18:02, Duncan Wren wrote:
>> > The DBI module when connecting to a mysql database seams to only
>> support
>> > integer values for the mysql_connect_timeout if you use say 0.5 secs
>> > as the
>> > timeout value it defaults to 3secs. Does anyone know a way round this
>> > problem as i need a very short timeout in my application.
>> >
>> > for example
>> >
>> > #does not work and defaults to 3 secs timeout
>> > $dbh =
>> > DBI->connect("DBI:mysql:db_name:db_host:3306;mysql_connect_timeout=
>> > 0.5","username","password");
>> >
>> > #does work and timesout after 1 sec
>> > $dbh =
>> >
>>
DBI->connect("DBI:mysql:db_name:db_host:3306;mysql_connect_timeout=1","username","password");
>>
>> >
>> >
>> > Thanks
>> >
>> > Duncan
>> >
>>
>>
>> --
>> Alexander Foken
>> mailto:[EMAIL PROTECTED]  http://www.foken.de/alexander/
>>
>>
>


--
Alexander Foken
mailto:[EMAIL PROTECTED]  http://www.foken.de/alexander/


Reply via email to