diff options
Diffstat (limited to 'ext/pgsql/tests/29nb_async_connect.phpt')
-rwxr-xr-x | ext/pgsql/tests/29nb_async_connect.phpt | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/ext/pgsql/tests/29nb_async_connect.phpt b/ext/pgsql/tests/29nb_async_connect.phpt new file mode 100755 index 0000000000..fc3868a26d --- /dev/null +++ b/ext/pgsql/tests/29nb_async_connect.phpt @@ -0,0 +1,44 @@ +--TEST-- +PostgreSQL non-blocking async connect +--SKIPIF-- +<?php +include("skipif.inc"); +?> +--FILE-- +<?php + +include('config.inc'); +include('nonblocking.inc'); + +if (!$db = pg_connect($conn_str, PGSQL_CONNECT_ASYNC)) { + die("pg_connect() error"); +} elseif (pg_connection_status($db) === PGSQL_CONNECTION_BAD) { + die("pg_connect() error"); +} elseif ($db_socket = pg_socket($db)) { + stream_set_blocking($db_socket, FALSE); +} else { + die("pg_socket() error"); +} + +while (TRUE) { + switch ($status = pg_connect_poll($db)) { + case PGSQL_POLLING_READING: + if (nb_is_readable($db_socket)) { break 2; } + break; + case PGSQL_POLLING_WRITING: + if (nb_is_writable($db_socket)) { break 2; } + break; + case PGSQL_POLLING_FAILED: + die("async connection failed"); + case PGSQL_POLLING_OK: + break 2; + } +} +assert(pg_connection_status($db) === PGSQL_CONNECTION_MADE); +echo "OK"; + +pg_close($db); + +?> +--EXPECT-- +OK |