*values,
int expand_dbname);
</synopsis>
The function returns one of the following values:
<variablelist>
<varlistentry id="libpq-PQpingParams-PQPING_OK">
<term><literal>PQPING_OK</literal></term>
<listitem>
<para>
The server is running and appears to be accepting connections.
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQpingParams-PQPING_REJECT">
<term><literal>PQPING_REJECT</literal></term>
<listitem>
<para>
The server is running but is in a state that disallows connections
(startup, shutdown, or crash recovery).
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQpingParams-PQPING_NO_RESPONSE">
<term><literal>PQPING_NO_RESPONSE</literal></term>
<listitem>
<para>
The server could not be contacted. This might indicate that the
server is not running, or that there is something wrong with the
given connection parameters (for example, wrong port number), or
that there is a network connectivity problem (for example, a
firewall blocking the connection request).
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQpingParams-PQPING_NO_ATTEMPT">
<term><literal>PQPING_NO_ATTEMPT</literal></term>
<listitem>
<para>
No attempt was made to contact the server, because the supplied
parameters were obviously incorrect or there was some client-side
problem (for example, out of memory).
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQping">
<term><function>PQping</function><indexterm><primary>PQping</primary></indexterm></term>
<listitem>
<para>
<xref linkend="libpq-PQping"/> reports the status of the
server. It accepts connection parameters identical to those of
<xref linkend="libpq-PQconnectdb"/>, described above. It is not
necessary to supply correct user name, password, or database name
values to obtain the server status; however, if incorrect values
are provided, the server will log a failed connection attempt.
<synopsis>
PGPing PQping(const char *conninfo);
</synopsis>
</para>
<para>
The return values are the same as for <xref linkend="libpq-PQpingParams"/>.
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-pqsetsslkeypasshook-openssl">
<term><function>PQsetSSLKeyPassHook_OpenSSL</function><indexterm><primary>PQsetSSLKeyPassHook_OpenSSL</primary></indexterm></term>
<listitem>
<para>
<function>PQsetSSLKeyPassHook_OpenSSL</function> lets an application override
<application>libpq</application>'s <link linkend="libpq-ssl-clientcert">default
handling of encrypted client certificate key files</link> using
<xref linkend="libpq-connect-sslpassword"/> or interactive prompting.
<synopsis>
void PQsetSSLKeyPassHook_OpenSSL(PQsslKeyPassHook_OpenSSL_type hook);
</synopsis>
The application passes a pointer to a callback function with signature:
<programlisting>
int callback_fn(char *buf, int size, PGconn *conn);
</programlisting>
which <application>libpq</application> will then call
<emphasis>instead of</emphasis> its default
<function>PQdefaultSSLKeyPassHook_OpenSSL</function> handler. The
callback should determine the password for the key and copy it to
result-buffer <parameter>buf</parameter> of size
<parameter>size</parameter>. The string in <parameter>buf</parameter>
must be null-terminated. The callback must return the length of the
password stored in <parameter>buf</parameter> excluding the null