Re: Too many connections

Paul Coldrey <[email protected]> Wed, 01 Jun 2005 16:56:09 +0930
Newsgroups gmane.comp.db.mysql.bugs
Message-ID <[email protected]>
Hi Ronny,

To save an email from the mysql big-wigs I'll start with their standard 
line that "this list is dedicated to repeatable test cases". I strongly 
suspect they would not see you post as suitably complete to show the 
presence a bug and allow it to be repeated. Perhaps your message would 
be better posted to the users list.

Having said that, here are some thoughts that might help you:

The API I have has a function mysql_reap_query(...) which seems to be 
entirely undocumented, but the source code offers this pearl:

/* send the query and return so we can do something else */
/* needs to be followed by *mysql_reap_query*() when we want to finish 
processing it */

It appears this function may be deprecated?? If so it raises the 
question of how does the server know when to free the data created by:

	mysql_query( &mysql, query )

It may be the call to: 

	res = mysql_store_result( &mysql )

triggers the clean up,.. but this doesn't seem intuitive (to me).



 Ronny Melz wrote:

>	Dear all,
>
>I have a problem with the mysql interface for c, which after a couple of hours 
>thinking about bad or faulty programming are eliminated with probability 
>almost 100%.
>
>within a loop, I do a mysql_query(), which is executed and I poll the result 
>and everything is fine. Up to when max_connections of the mysqld is reached: 
>each of the queries leaves after executing a sleeping mysql process behind on 
>the server, which hence throws the "Too many connections" error (or under 
>certain conditions even a "Can't create TCP/IP socket (24)").
>
>Just because of this problem I recently upgraded mysql (including the 
>libraries) from 4.0.21 to 4.1.12, but the problem persisted.
>
>Does anybody have an idea of how to solve this problem?
>Any suggestions are appreciated.
>
>Best,
>Ronny
>
>
>p.s.: code
>#define GET_W_NR \
>"select wort_nr from wortliste where wort_bin='%s' limit 1"
>MYSQL mysql;
>MYSQL_RES *res;
>MYSQL_ROW row;
>char *query;
>
>init...
>  {
>  mysql_init(&mysql);
>  if ( !mysql_real_connect( &mysql, "127.0.0.1", "username", "passwd", 
>"dbase",
>         0, "/var/lib/mysql/mysql.sock", 0 ) )
>    {
>    fprintf(stderr, "Failed: %s\n",    mysql_error(&mysql));
>    }
>  if (!(query = (char*) malloc(256*sizeof(char)))) fprintf(stderr, "no 
>pointer");
>  }
>
>this is called in a loop and returns with an error after `max_connections` 
>cycles:
>{
>    sprintf(query, GET_W_NR, refWort);
>    if ( mysql_query( &mysql, query ) )
>        {
>        fprintf(stderr, "query failed: %s\n", mysql_error(&mysql));
>        return 0;
>        }
>    if ( !( res = mysql_store_result( &mysql ) ) )
>        {fprintf(stderr, "store failed: %s\n", mysql_error(&mysql)); return 
>0;}
>    if ( row = mysql_fetch_row( res ) )
>        ref_word_nr = atoi(row[0]);
>    else
>        {fprintf(stderr, "fetch failed: %s\n", mysql_error(&mysql)); return 
>0;}
>    mysql_free_result(res);
>}
>
>exit...
>  free(query);
>  mysql_close(&mysql);
>
>  
>



-- 
MySQL Bugs Mailing List
For list archives: http://lists.mysql.com/bugs
To unsubscribe:    http://lists.mysql.com/[email protected]