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/