postgresql/src/interfaces/libpq
Tom Lane 105024a472 Improve the granularity of PQsocketPoll's timeout parameter.
Commit f5e4dedfa exposed libpq's internal function PQsocketPoll
without a lot of thought about whether that was an API we really
wanted to chisel in stone.  The main problem with it is the use of
time_t to specify the timeout.  While we do want an absolute time
so that a loop around PQsocketPoll doesn't have problems with
timeout slippage, time_t has only 1-second resolution.  That's
already problematic for libpq's own internal usage --- for example,
pqConnectDBComplete has long had a kluge to treat "connect_timeout=1"
as 2 seconds so that it doesn't accidentally round to nearly zero.
And it's even less likely to be satisfactory for external callers.
Hence, let's change this while we still can.

The best idea seems to be to use an int64 count of microseconds since
the epoch --- basically the same thing as the backend's TimestampTz,
but let's use the standard Unix epoch (1970-01-01) since that's more
likely for clients to be easy to calculate.  Millisecond resolution
would be plenty for foreseeable uses, but maybe the day will come that
we're glad we used microseconds.

Also, since time(2) isn't especially helpful for computing timeouts
defined this way, introduce a new function PQgetCurrentTimeUSec
to get the current time in this form.

Remove the hack in pqConnectDBComplete, so that "connect_timeout=1"
now means what you'd expect.

We can also remove the "#include <time.h>" that f5e4dedfa added to
libpq-fe.h, since there's no longer a need for time_t in that header.
It seems better for v17 not to enlarge libpq-fe.h's include footprint
from what it's historically been, anyway.

I also failed to resist the temptation to do some wordsmithing
on PQsocketPoll's documentation.

Patch by me, per complaint from Dominique Devienne.

Discussion: https://postgr.es/m/913559.1718055575@sss.pgh.pa.us
2024-06-13 15:14:32 -04:00
..
po Translation updates 2024-05-20 12:04:11 +02:00
t Remove option to fall back from direct to postgres SSL negotiation 2024-05-16 17:17:37 +03:00
test Update copyright for 2024 2024-01-03 20:49:05 -05:00
.gitignore Run tap tests in src/interfaces/libpq. 2022-02-26 16:51:47 -08:00
exports.txt Improve the granularity of PQsocketPoll's timeout parameter. 2024-06-13 15:14:32 -04:00
fe-auth-sasl.h Refactor SASL exchange to return tri-state status 2024-03-21 14:45:46 +01:00
fe-auth-scram.c Refactor SASL exchange to return tri-state status 2024-03-21 14:45:46 +01:00
fe-auth.c Revise GUC names quoting in messages again 2024-05-17 11:44:26 +02:00
fe-auth.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-cancel.c libpq: Some message style normalization 2024-06-13 07:10:35 +02:00
fe-connect.c Improve the granularity of PQsocketPoll's timeout parameter. 2024-06-13 15:14:32 -04:00
fe-exec.c libpq: Some message style normalization 2024-06-13 07:10:35 +02:00
fe-gssapi-common.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-gssapi-common.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-lobj.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-misc.c Improve the granularity of PQsocketPoll's timeout parameter. 2024-06-13 15:14:32 -04:00
fe-print.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-protocol3.c Support retrieval of results in chunks with libpq. 2024-04-06 20:45:11 -04:00
fe-secure-common.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-secure-common.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-secure-gssapi.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-secure-openssl.c libpq: Remove a gettext marker 2024-06-12 08:43:43 +02:00
fe-secure.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
fe-trace.c Rename libpq trace internal functions 2024-05-02 16:11:26 +02:00
legacy-pqsignal.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
libpq-events.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
libpq-events.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
libpq-fe.h Improve the granularity of PQsocketPoll's timeout parameter. 2024-06-13 15:14:32 -04:00
libpq-int.h Improve the granularity of PQsocketPoll's timeout parameter. 2024-06-13 15:14:32 -04:00
Makefile Move libpq encryption negotiation tests 2024-04-12 19:52:37 +03:00
meson.build Move libpq encryption negotiation tests 2024-04-12 19:52:37 +03:00
nls.mk Add missing source file to libpq/nls.mk 2024-04-17 09:11:02 +02:00
pg_service.conf.sample Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00
pqexpbuffer.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
pqexpbuffer.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pthread-win32.c Clean up Windows-specific mutex code in libpq and ecpglib. 2024-02-09 11:11:39 -05:00
README Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
win32.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
win32.h Recognize network-failure errnos as indicating hard connection loss. 2020-10-10 13:28:12 -04:00

src/interfaces/libpq/README

This directory contains the C version of Libpq, the POSTGRES frontend library.