aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/libpq.sgml48
-rw-r--r--src/interfaces/libpq/fe-connect.c25
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 *