mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
Expose PQsocketPoll via libpq
This is useful when connecting to a database asynchronously via PQconnectStart(), since it handles deciding between poll() and select(), and some of the required boilerplate. Tristan Partin, reviewed by Gurjeet Singh, Heikki Linnakangas, Jelte Fennema-Nio, and me. Discussion: http://postgr.es/m/D08WWCPVHKHN.3QELIKZJ2D9RZ@neon.tech
This commit is contained in:
@@ -202,3 +202,4 @@ PQcancelSocket 199
|
||||
PQcancelErrorMessage 200
|
||||
PQcancelReset 201
|
||||
PQcancelFinish 202
|
||||
PQsocketPoll 203
|
||||
|
@@ -55,7 +55,6 @@ static int pqPutMsgBytes(const void *buf, size_t len, PGconn *conn);
|
||||
static int pqSendSome(PGconn *conn, int len);
|
||||
static int pqSocketCheck(PGconn *conn, int forRead, int forWrite,
|
||||
time_t end_time);
|
||||
static int pqSocketPoll(int sock, int forRead, int forWrite, time_t end_time);
|
||||
|
||||
/*
|
||||
* PQlibVersion: return the libpq version number
|
||||
@@ -1059,7 +1058,7 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time)
|
||||
|
||||
/* We will retry as long as we get EINTR */
|
||||
do
|
||||
result = pqSocketPoll(conn->sock, forRead, forWrite, end_time);
|
||||
result = PQsocketPoll(conn->sock, forRead, forWrite, end_time);
|
||||
while (result < 0 && SOCK_ERRNO == EINTR);
|
||||
|
||||
if (result < 0)
|
||||
@@ -1083,8 +1082,8 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time)
|
||||
* Timeout is infinite if end_time is -1. Timeout is immediate (no blocking)
|
||||
* if end_time is 0 (or indeed, any time before now).
|
||||
*/
|
||||
static int
|
||||
pqSocketPoll(int sock, int forRead, int forWrite, time_t end_time)
|
||||
int
|
||||
PQsocketPoll(int sock, int forRead, int forWrite, time_t end_time)
|
||||
{
|
||||
/* We use poll(2) if available, otherwise select(2) */
|
||||
#ifdef HAVE_POLL
|
||||
|
@@ -21,6 +21,7 @@ extern "C"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
/*
|
||||
* postgres_ext.h defines the backend's externally visible types,
|
||||
@@ -670,6 +671,9 @@ extern int lo_export(PGconn *conn, Oid lobjId, const char *filename);
|
||||
/* Get the version of the libpq library in use */
|
||||
extern int PQlibVersion(void);
|
||||
|
||||
/* Poll a socket for reading and/or writing with an optional timeout */
|
||||
extern int PQsocketPoll(int sock, int forRead, int forWrite, time_t end_time);
|
||||
|
||||
/* Determine length of multibyte encoded char at *s */
|
||||
extern int PQmblen(const char *s, int encoding);
|
||||
|
||||
|
Reference in New Issue
Block a user