mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
libpq: Try next host if one of them times out.
If one host in a multi-host connection string times out, move on to the next specified host instead of giving up entirely. Takayuki Tsunakawa, reviewed by Michael Paquier. I added a minor adjustment to the documentation. Discussion: http://postgr.es/m/0A3221C70F24FB45833433255569204D1F6F42F5@G01JPEXMBYT05
This commit is contained in:
@ -991,11 +991,9 @@ pqWait(int forRead, int forWrite, PGconn *conn)
|
||||
/*
|
||||
* pqWaitTimed: wait, but not past finish_time.
|
||||
*
|
||||
* If finish_time is exceeded then we return failure (EOF). This is like
|
||||
* the response for a kernel exception because we don't want the caller
|
||||
* to try to read/write in that case.
|
||||
*
|
||||
* finish_time = ((time_t) -1) disables the wait limit.
|
||||
*
|
||||
* Returns -1 on failure, 0 if the socket is readable/writable, 1 if it timed out.
|
||||
*/
|
||||
int
|
||||
pqWaitTimed(int forRead, int forWrite, PGconn *conn, time_t finish_time)
|
||||
@ -1005,13 +1003,13 @@ pqWaitTimed(int forRead, int forWrite, PGconn *conn, time_t finish_time)
|
||||
result = pqSocketCheck(conn, forRead, forWrite, finish_time);
|
||||
|
||||
if (result < 0)
|
||||
return EOF; /* errorMessage is already set */
|
||||
return -1; /* errorMessage is already set */
|
||||
|
||||
if (result == 0)
|
||||
{
|
||||
printfPQExpBuffer(&conn->errorMessage,
|
||||
libpq_gettext("timeout expired\n"));
|
||||
return EOF;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user