int mysql_options(MYSQL *mysql, enum mysql_option
        option, const void *arg)
      
Description
Can be used to set extra connect options and affect behavior for a connection. This function may be called multiple times to set several options.
        mysql_options() should be called
        after mysql_init() and before
        mysql_connect() or
        mysql_real_connect().
      
        The option argument is the option that you
        want to set; the arg argument is the value
        for the option. If the option is an integer,
        arg should point to the value of the integer.
      
        The following list describes the possible options, their effect,
        and how arg is used for each option. Several
        of the options apply only when the application is linked against
        the libmysqld embedded server library and are
        unused for applications linked against the
        libmysql client library. For option
        descriptions that indicate arg is unused, its
        value is irrelevant; it is conventional to pass 0.
      
            MYSQL_INIT_COMMAND (argument type:
            char *)
          
SQL statement to execute when connecting to the MySQL server. Automatically re-executed if reconnection occurs.
            MYSQL_OPT_COMPRESS (argument: not used)
          
Use the compressed client/server protocol.
            MYSQL_OPT_CONNECT_TIMEOUT (argument type:
            unsigned int *)
          
Connect timeout in seconds.
            MYSQL_OPT_GUESS_CONNECTION (argument: not
            used)
          
            For an application linked against the
            libmysqld embedded server library, this
            allows the library to guess whether to use the embedded
            server or a remote server. “Guess” means that
            if the host name is set and is not
            localhost, it uses a remote server. This
            behavior is the default.
            MYSQL_OPT_USE_EMBEDDED_CONNECTION and
            MYSQL_OPT_USE_REMOTE_CONNECTION can be
            used to override it. This option is ignored for applications
            linked against the libmysqlclient client
            library.
          
            MYSQL_OPT_LOCAL_INFILE (argument type:
            optional pointer to unsigned int)
          
            If no pointer is given or if pointer points to an
            unsigned int that has a nonzero value,
            the LOAD LOCAL INFILE statement is
            enabled.
          
            MYSQL_OPT_NAMED_PIPE (argument: not used)
          
Use named pipes to connect to a MySQL server on Windows, if the server allows named-pipe connections.
            MYSQL_OPT_PROTOCOL (argument type:
            unsigned int *)
          
            Type of protocol to use. Should be one of the enum values of
            mysql_protocol_type defined in
            mysql.h.
          
            MYSQL_OPT_READ_TIMEOUT (argument type:
            unsigned int *)
          
            The timeout in seconds for attempts to read from the server.
            Each attempt uses this timeout value and there are retries
            if necessary, so the total effective timeout value is three
            times the option value. You can set the value so that a lost
            connection can be detected earlier than the TCP/IP
            Close_Wait_Timeout value of 10 minutes.
            This option works only for TCP/IP connections.
          
            MYSQL_OPT_RECONNECT (argument type:
            my_bool *)
          
Enable or disable automatic reconnection to the server if the connection is found to have been lost. Reconnect is off by default; this option provides a way to set reconnection behavior explicitly.
            MYSQL_SET_CLIENT_IP (argument type:
            char *)
          
            For an application linked against the
            libmysqld embedded server library (when
            libmysqld is compiled with authentication
            support), this means that the user is considered to have
            connected from the specified IP address (specified as a
            string) for authentication purposes. This option is ignored
            for applications linked against the
            libmysqlclient client library.
          
            MYSQL_OPT_SSL_VERIFY_SERVER_CERT
            (argument type: my_bool *)
          
Enable or disable verification of the server's Common Name value in its certificate against the host name used when connecting to the server. The connection is rejected if there is a mismatch. This feature can be used to prevent man-in-the-middle attacks. Verification is disabled by default.
            MYSQL_OPT_USE_EMBEDDED_CONNECTION
            (argument: not used)
          
            For an application linked against the
            libmysqld embedded server library, this
            forces the use of the embedded server for the connection.
            This option is ignored for applications linked against the
            libmysqlclient client library.
          
            MYSQL_OPT_USE_REMOTE_CONNECTION
            (argument: not used)
          
            For an application linked against the
            libmysqld embedded server library, this
            forces the use of a remote server for the connection. This
            option is ignored for applications linked against the
            libmysqlclient client library.
          
            MYSQL_OPT_USE_RESULT (argument: not used)
          
This option is unused.
            MYSQL_OPT_WRITE_TIMEOUT (argument type:
            unsigned int *)
          
            The timeout in seconds for attempts to write to the server.
            Each attempt uses this timeout value and there are
            net_retry_count retries if
            necessary, so the total effective timeout value is
            net_retry_count times the
            option value. This option works only for TCP/IP connections.
          
            MYSQL_READ_DEFAULT_FILE (argument type:
            char *)
          
            Read options from the named option file instead of from
            my.cnf.
          
            MYSQL_READ_DEFAULT_GROUP (argument type:
            char *)
          
            Read options from the named group from
            my.cnf or the file specified with
            MYSQL_READ_DEFAULT_FILE.
          
            MYSQL_REPORT_DATA_TRUNCATION (argument
            type: my_bool *)
          
            Enable or disable reporting of data truncation errors for
            prepared statements via the error member
            of MYSQL_BIND structures. (Default:
            enabled.)
          
            MYSQL_SECURE_AUTH (argument type:
            my_bool *)
          
Whether to connect to a server that does not support the password hashing used in MySQL 4.1.1 and later.
            MYSQL_SET_CHARSET_DIR (argument type:
            char *)
          
The path name to the directory that contains character set definition files.
            MYSQL_SET_CHARSET_NAME (argument type:
            char *)
          
            The name of the character set to use as the default
            character set. The argument can be
            MYSQL_AUTODETECT_CHARSET_NAME to cause
            the character set to be autodetected based on the operating
            system setting (see Section 9.1.4, “Connection Character Sets and Collations”).
          
            MYSQL_SHARED_MEMORY_BASE_NAME (argument
            type: char *)
          
            The name of the shared-memory object for communication to
            the server on Windows, if the server supports shared-memory
            connections. Should have the same value as the
            --shared-memory-base-name
            option used for the mysqld server you
            want to connect to.
          
        The client group is always read if you use
        MYSQL_READ_DEFAULT_FILE or
        MYSQL_READ_DEFAULT_GROUP.
      
The specified group in the option file may contain the following options.
| Option | Description | 
character-sets-dir= | 
The directory where character sets are installed. | 
compress | 
Use the compressed client/server protocol. | 
connect-timeout= | 
Connect timeout in seconds. On Linux this timeout is also used for waiting for the first answer from the server. | 
database= | 
Connect to this database if no database was specified in the connect command. | 
debug | 
Debug options. | 
default-character-set= | 
The default character set to use. | 
disable-local-infile | 
Disable use of LOAD DATA
                LOCAL. | 
host= | 
Default host name. | 
init-command= | 
Statement to execute when connecting to MySQL server. Automatically re-executed if reconnection occurs. | 
interactive-timeout= | 
Same as specifying CLIENT_INTERACTIVE to
                mysql_real_connect().
                See Section 21.9.3.52, “mysql_real_connect()”. | 
local-infile[={0|1}] | 
If no argument or nonzero argument, enable use of
                LOAD DATA
                LOCAL; otherwise disable. | 
max_allowed_packet= | 
Maximum size of packet that client can read from server. | 
multi-queries, multi-results
 | 
Allow multiple result sets from multiple-statement executions or stored procedures. | 
multi-statements | 
Allow the client to send multiple statements in a single string
                (separated by “;”). | 
password= | 
Default password. | 
pipe | 
Use named pipes to connect to a MySQL server on Windows. | 
port= | 
Default port number. | 
protocol={TCP|SOCKET|PIPE|MEMORY} | 
The protocol to use when connecting to the server. | 
return-found-rows | 
Tell mysql_info() to return found rows
                instead of updated rows when using
                UPDATE. | 
shared-memory-base-name= | 
Shared-memory name to use to connect to server. | 
socket= | 
Default socket file. | 
ssl-ca= | 
Certificate Authority file. | 
ssl-capath= | 
Certificate Authority directory. | 
ssl-cert= | 
Certificate file. | 
ssl-cipher= | 
Allowable SSL ciphers. | 
ssl-key= | 
Key file. | 
timeout= | 
Like connect-timeout. | 
user | 
Default user. | 
        timeout has been replaced by
        connect-timeout, but
        timeout is still supported in MySQL
        5.5 for backward compatibility.
      
For more information about option files, see Section 4.2.3.3, “Using Option Files”.
Return Values
Zero for success. Nonzero if you specify an unknown option.
Example
        The following mysql_options()
        calls request the use of compression in the client/server
        protocol, cause options to be read from the
        [odbc] group of option files, and disable
        transaction autocommit mode:
      
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_OPT_COMPRESS,0);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"odbc");
mysql_options(&mysql,MYSQL_INIT_COMMAND,"SET autocommit=0");
if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
{
    fprintf(stderr, "Failed to connect to database: Error: %s\n",
          mysql_error(&mysql));
}
        This code requests that the client use the compressed
        client/server protocol and read the additional options from the
        odbc section in the
        my.cnf file.
      

User Comments
When retrying a connection, I used mysql_options() to set a connection timeout then called mysql_real_connect in a while loop:
mysql_options(...);
while(!mysql_real_connect(...))
{
nanosleep(...);
}
Doing this, it appears that the connection timeout was lost after the first iteration. I had to re-set the connection timeout after every attempt:
mysql_options(...);
while(!mysql_real_connect(...))
{
nanosleep(...);
mysql_options(...);
}
Don't know if this is the case for other options....
Set flag CLIENT_REMEMBER_OPTIONS in client_flag when you calling mysql_real_connect().
Without this flag, if mysql_real_connect() fails, you must repeat the mysql_options() calls before trying to connect again.
Speco
Add your own comment.