private function createPool($client, $o)
{
$n = min(count($o->results), $client->maxPoolSize);
$pool = array();
$errno = 0;
$errstr = '';
$context = @stream_context_create($client->options);
for ($i = 0; $i < $n; $i++) {
$scheme = parse_url($client->uri, PHP_URL_SCHEME);
if ($scheme == 'unix') {
$stream = @fsockopen('unix://' . parse_url($client->uri, PHP_URL_PATH));
} else {
$stream = @stream_socket_client($client->uri . '/' . $i, $errno, $errstr, max(0, $o->deadlines[$i] - microtime(true)), STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $context);
}
if ($stream !== false && @stream_set_blocking($stream, false) !== false) {
@stream_set_read_buffer($stream, $client->readBuffer);
@stream_set_write_buffer($stream, $client->writeBuffer);
if (function_exists('socket_import_stream')) {
if ($scheme === 'tcp' || $scheme === 'unix') {
$socket = socket_import_stream($stream);
socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, (int) $client->keepAlive);
if ($scheme === 'tcp') {
socket_set_option($socket, SOL_TCP, TCP_NODELAY, (int) $client->noDelay);
}
}
}
$pool[] = $stream;
}
}
if (empty($pool)) {
$e = new Exception($errstr, $errno);
$results = $o->results;
$o->buffers = array();
$o->deadlines = array();
$o->results = array();
foreach ($results as $result) {
$result->reject($e);
}
return false;
}
return $pool;
}