int mysql_ping(MYSQL *mysql)
Description
Checks whether the connection to the server is working. If the connection has gone down, an attempt to reconnect is made unless auto-reconnect is disabled.
This function can be used by clients that remain idle for a long while, to check whether the server has closed the connection and reconnect if necessary.
Return Values
Zero if the connection to the server is alive. Non-zero if an error occurred. A non-zero return does not indicate whether the MySQL server itself is down; the connection might be broken for other reasons such as network problems.
Errors
CR_COMMANDS_OUT_OF_SYNC
Commands were executed in an improper order.
CR_SERVER_GONE_ERROR
The MySQL server has gone away.
CR_UNKNOWN_ERROR
An unknown error occurred.

User Comments
An important thing to keep in mind, especially if you're using threads to keep a database connection open/persistant:
A call to mysql_ping, even if the connection never went down, will wipe the results of a mysql_affected_rows, if it somehow occurs between a command execution, and the call.
Symptom: mysql_affected_rows returns -1, when you expect a different number.
(Note - there could be other reasons, this is just one way to guarantee this behavior.)
mysql_ping will only attempt to automatically reconnect if that option has been previously set. As of 5.0.3 the default is to not reconnect.
In order to automatically reconnect, call mysql_options( &mysql, MYSQL_OPT_RECONNECT, ... ) AFTER mysql_real_connect.
Be aware that mysql_ping can cause a SIGPIPE if the connection has idled out. If you aren't expecting a SIGPIPE this can be a little bit of an unpleasant surprize, especially if you're running multithreaded.
Add your own comment.