php/php-src — pull request #626 by rdlowrey (2014-03-14 13:17:35+00:00)
Title: Support async pgsql connections and non-blocking queries

### New functions

Each of the new functions accepts a single `$connection` resource paramter.

- `int pg_connect_poll(resource $connection)`
- `resource pg_socket(resource $connection)`
- `mixed pg_consume_input(resource $connection)`
- `mixed pg_flush(resource $connection)`

### Modified functions

The following functions now additionally return zero if the underlying socket is set to non-blocking mode and the send operation does not complete immediately. Previously these functions returned only boolean values and blocked execution while polling until all data was sent:

- `pg_send_execute`
- `pg_send_prepare`
- `pg_send_query`
- `pg_send_query_params`

### New constants

Used with `pg_connect()` to initiate an asynchronous connection attempt:

- `PGSQL_CONNECT_ASYNC`

Used with `pg_connection_status()` to determine the current state of an async connection attempt:

- `PGSQL_CONNECTION_STARTED`
- `PGSQL_CONNECTION_MADE`
- `PGSQL_CONNECTION_AWAITING_RESPONSE`
- `PGSQL_CONNECTION_AUTH_OK`
- `PGSQL_CONNECTION_SSL_STARTUP`
- `PGSQL_CONNECTION_SETENV`

Used with `pg_connect_poll()` to determine the result of an async connection attempt:

- `PGSQL_POLLING_FAILED`
- `PGSQL_POLLING_READING`
- `PGSQL_POLLING_WRITING`
- `PGSQL_POLLING_OK`
- `PGSQL_POLLING_ACTIVE`

### Polling via returned `pg_socket()` stream

`pg_socket()` returns a read-only socket stream that may be cast to a file descriptor for select (and similar) polling operations. Blocking behavior of the pgsql connection socket can be controlled by calling `stream_set_blocking()` on the stream returned by `pg_socket()`.

### Backwards Compatibility

These changes have no BC ramifications. All existing code continues to work as before.

### Example Async Connect

```php