diff options
-rw-r--r-- | doc/src/sgml/libpq.sgml | 48 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-connect.c | 25 |
2 files changed, 59 insertions, 14 deletions
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 1fd5dd9fca6..943adfef774 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1692,7 +1692,7 @@ char *PQpass(const PGconn *conn); <listitem> <para> - Returns the server host name of the connection. + Returns the server host name of the active connection. This can be a host name, an IP address, or a directory path if the connection is via Unix socket. (The path case can be distinguished because it will always be an absolute path, beginning @@ -1701,6 +1701,30 @@ char *PQpass(const PGconn *conn); char *PQhost(const PGconn *conn); </synopsis> </para> + + <para> + If the connection parameters specified both <literal>host</literal> and + <literal>hostaddr</literal>, then <function>PQhost</function> will + return the <literal>host</literal> information. If only + <literal>hostaddr</literal> was specified, then that is returned. + If multiple hosts were specified in the connection parameters, + <function>PQhost</function> returns the host actually connected to. + </para> + + <para> + <function>PQhost</function> returns <symbol>NULL</symbol> if the + <parameter>conn</parameter> argument is <symbol>NULL</symbol>. + Otherwise, if there is an error producing the host information (perhaps + if the connection has not been fully established or there was an + error), it returns an empty string. + </para> + + <para> + If multiple hosts were specified in the connection parameters, it is + not possible to rely on the result of <function>PQhost</function> until + the connection is established. The status of the connection can be + checked using the function <function>PQstatus</function>. + </para> </listitem> </varlistentry> @@ -1714,12 +1738,32 @@ char *PQhost(const PGconn *conn); <listitem> <para> - Returns the port of the connection. + Returns the port of the active connection. <synopsis> char *PQport(const PGconn *conn); </synopsis> </para> + + <para> + If multiple ports were specified in the connection parameters, + <function>PQport</function> returns the port actually connected to. + </para> + + <para> + <function>PQport</function> returns <symbol>NULL</symbol> if the + <parameter>conn</parameter> argument is <symbol>NULL</symbol>. + Otherwise, if there is an error producing the port information (perhaps + if the connection has not been fully established or there was an + error), it returns an empty string. + </para> + + <para> + If multiple ports were specified in the connection parameters, it is + not possible to rely on the result of <function>PQport</function> until + the connection is established. The status of the connection can be + checked using the function <function>PQstatus</function>. + </para> </listitem> </varlistentry> diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 39c19998c22..f3057e9d6f5 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -6017,19 +6017,18 @@ PQhost(const PGconn *conn) { if (!conn) return NULL; - if (conn->connhost != NULL && - conn->connhost[conn->whichhost].type != CHT_HOST_ADDRESS) - return conn->connhost[conn->whichhost].host; - else if (conn->pghost != NULL && conn->pghost[0] != '\0') - return conn->pghost; - else + + if (conn->connhost != NULL) { -#ifdef HAVE_UNIX_SOCKETS - return DEFAULT_PGSOCKET_DIR; -#else - return DefaultHost; -#endif + if (conn->connhost[conn->whichhost].host != NULL && + conn->connhost[conn->whichhost].host[0] != '\0') + return conn->connhost[conn->whichhost].host; + else if (conn->connhost[conn->whichhost].hostaddr != NULL && + conn->connhost[conn->whichhost].hostaddr[0] != '\0') + return conn->connhost[conn->whichhost].hostaddr; } + + return ""; } char * @@ -6037,9 +6036,11 @@ PQport(const PGconn *conn) { if (!conn) return NULL; + if (conn->connhost != NULL) return conn->connhost[conn->whichhost].port; - return conn->pgport; + + return ""; } char * |