So the documentation on this function is pretty barebones (as is the case for a lot of thin PHP wrappers around C functions), but from what I've gathered by reading the libpq doc and trying various things, you should probably know the following :* Polling the connection while the underlying socket is busy will cause the connection (or at least the polling, I'm not sure) to fail.* As stated by the libpq documentation, "do not assume that the socket remains the same across PQconnectPoll calls"* The socket will become ready after every change in connection status, so the connection must be polled multiple times until the function returns "polling_ok" or "polling_failed".* "polling_active" can never be returned by libpq and has literally never been used anywhere ever, it has been an unused constant since day 1.What you need to do is use pg_socket get a PHP stream object corresponding to the current socket and wait after it before polling, like so:<?phpfunction pg_wait_connection_ready($conn) { assert(is_resource($conn)); assert(get_resource_type($conn) === "pgsql link" || get_resource_type($conn) === "pgsql link persistent"); $poll_outcome = PGSQL_POLLING_WRITING; while (true) { $socket = [pg_socket($conn)]; $null = []; if ($poll_outcome === PGSQL_POLLING_READING) { stream_select($socket, $null, $null, 5); $poll_outcome = pg_connect_poll($conn); } else if ($poll_outcome === PGSQL_POLLING_WRITING) { stream_select($null, $socket, $null, 5); $poll_outcome = pg_connect_poll($conn); } else { break; } }}$db = pg_connect($conn_string, PGSQL_CONNECT_ASYNC);pg_wait_connection_ready($db);pg_query($sql);?>