Transporter::createPool PHP Method

createPool() private method

private createPool ( $client, $o )
    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;
    }