protected function connect(UriInterface $uri, $timeout = null)
	{
		$errno = null;
		$err = null;

		// Get the host from the uri.
		$host = ($uri->isSSL()) ? 'ssl://' . $uri->getHost() : $uri->getHost();

		// If the port is not explicitly set in the URI detect it.
		if (!$uri->getPort())
		{
			$port = ($uri->getScheme() == 'https') ? 443 : 80;
		}

		// Use the set port.
		else
		{
			$port = $uri->getPort();
		}

		// Build the connection key for resource memory caching.
		$key = md5($host . $port);

		// If the connection already exists, use it.
		if (!empty($this->connections[$key]) && is_resource($this->connections[$key]))
		{
			// Connection reached EOF, cannot be used anymore
			$meta = stream_get_meta_data($this->connections[$key]);

			if ($meta['eof'])
			{
				if (!fclose($this->connections[$key]))
				{
					throw new \RuntimeException('Cannot close connection');
				}
			}

			// Make sure the connection has not timed out.
			elseif (!$meta['timed_out'])
			{
				return $this->connections[$key];
			}
		}

		if (!is_numeric($timeout))
		{
			$timeout = ini_get('default_socket_timeout');
		}

		// Capture PHP errors
		$php_errormsg = '';
		$track_errors = ini_get('track_errors');
		ini_set('track_errors', true);

		// PHP sends a warning if the uri does not exists; we silence it and throw an exception instead.
		// Attempt to connect to the server
		$connection = @fsockopen($host, $port, $errno, $err, $timeout);

		if (!$connection)
		{
			if (!$php_errormsg)
			{
				// Error but nothing from php? Create our own
				$php_errormsg = sprintf('Could not connect to resource: %s', $uri, $err, $errno);
			}

			// Restore error tracking to give control to the exception handler
			ini_set('track_errors', $track_errors);

			throw new \RuntimeException($php_errormsg);
		}

		// Restore error tracking to what it was before.
		ini_set('track_errors', $track_errors);

		// Since the connection was successful let's store it in case we need to use it later.
		$this->connections[$key] = $connection;

		// If an explicit timeout is set, set it.
		if (isset($timeout))
		{
			stream_set_timeout($this->connections[$key], (int) $timeout);
		}

		return $this->connections[$key];
	}
protected function connect(UriInterface $uri, $timeout = null)
	{
		$errno = null;
		$err = null;

		// Get the host from the uri.
		$host = ($uri->isSSL()) ? 'ssl://' . $uri->getHost() : $uri->getHost();

		// If the port is not explicitly set in the URI detect it.
		if (!$uri->getPort())
		{
			$port = ($uri->getScheme() == 'https') ? 443 : 80;
		}

		// Use the set port.
		else
		{
			$port = $uri->getPort();
		}

		// Build the connection key for resource memory caching.
		$key = md5($host . $port);

		// If the connection already exists, use it.
		if (!empty($this->connections[$key]) && is_resource($this->connections[$key]))
		{
			// Connection reached EOF, cannot be used anymore
			$meta = stream_get_meta_data($this->connections[$key]);

			if ($meta['eof'])
			{
				if (!fclose($this->connections[$key]))
				{
					throw new \RuntimeException('Cannot close connection');
				}
			}

			// Make sure the connection has not timed out.
			elseif (!$meta['timed_out'])
			{
				return $this->connections[$key];
			}
		}

		if (!is_numeric($timeout))
		{
			$timeout = ini_get('default_socket_timeout');
		}

		// Capture PHP errors
		$php_errormsg = '';
		$track_errors = ini_get('track_errors');
		ini_set('track_errors', true);

		// PHP sends a warning if the uri does not exists; we silence it and throw an exception instead.
		// Attempt to connect to the server
		$connection = @fsockopen($host, $port, $errno, $err, $timeout);

		if (!$connection)
		{
			if (!$php_errormsg)
			{
				// Error but nothing from php? Create our own
				$php_errormsg = sprintf('Could not connect to resource: %s', $uri, $err, $errno);
			}

			// Restore error tracking to give control to the exception handler
			ini_set('track_errors', $track_errors);

			throw new \RuntimeException($php_errormsg);
		}

		// Restore error tracking to what it was before.
		ini_set('track_errors', $track_errors);

		// Since the connection was successful let's store it in case we need to use it later.
		$this->connections[$key] = $connection;

		// If an explicit timeout is set, set it.
		if (isset($timeout))
		{
			stream_set_timeout($this->connections[$key], (int) $timeout);
		}

		return $this->connections[$key];
	}
protected function connect ( UriInterface $ uri , $ timeout = null ) { $ errno = null ; $ err = null ; // Get the host from the uri. $ host = ( $ uri -> isSSL ( ) ) ? 'ssl://' . $ uri -> getHost ( ) : $ uri -> getHost ( ) ; // If the port is not explicitly set in the URI detect it. if ( ! $ uri -> getPort ( ) ) { $ port = ( $ uri -> getScheme ( ) == 'https' ) ? 443 : 80 ; } // Use the set port. else { $ port = $ uri -> getPort ( ) ; } // Build the connection key for resource memory caching. $ key = md5 ( $ host . $ port ) ; // If the connection already exists, use it. if ( ! empty ( $ this -> connections [ $ key ] ) && is_resource ( $ this -> connections [ $ key ] ) ) { // Connection reached EOF, cannot be used anymore $ meta = stream_get_meta_data ( $ this -> connections [ $ key ] ) ; if ( $ meta [ 'eof' ] ) { if ( ! fclose ( $ this -> connections [ $ key ] ) ) { throw new \ RuntimeException ( 'Cannot close connection' ) ; } } // Make sure the connection has not timed out. elseif ( ! $ meta [ 'timed_out' ] ) { return $ this -> connections [ $ key ] ; } } if ( ! is_numeric ( $ timeout ) ) { $ timeout = ini_get ( 'default_socket_timeout' ) ; } // Capture PHP errors $ php_errormsg = '' ; $ track_errors = ini_get ( 'track_errors' ) ; ini_set ( 'track_errors' , true ) ; // PHP sends a warning if the uri does not exists; we silence it and throw an exception instead. // Attempt to connect to the server $ connection = @ fsockopen ( $ host , $ port , $ errno , $ err , $ timeout ) ; if ( ! $ connection ) { if ( ! $ php_errormsg ) { // Error but nothing from php? Create our own $ php_errormsg = sprintf ( 'Could not connect to resource: %s' , $ uri , $ err , $ errno ) ; } // Restore error tracking to give control to the exception handler ini_set ( 'track_errors' , $ track_errors ) ; throw new \ RuntimeException ( $ php_errormsg ) ; } // Restore error tracking to what it was before. ini_set ( 'track_errors' , $ track_errors ) ; // Since the connection was successful let's store it in case we need to use it later. $ this -> connections [ $ key ] = $ connection ; // If an explicit timeout is set, set it. if ( isset ( $ timeout ) ) { stream_set_timeout ( $ this -> connections [ $ key ] , ( int ) $ timeout ) ; } return $ this -> connections [ $ key ] ; }
Method to connect to a server and get the resource.

@param   UriInterface  $uri      The URI to connect with.
@param   integer       $timeout  Read timeout in seconds.

@return  resource  Socket connection resource.

@since   1.0
@throws  \RuntimeException
Method to connect to a server and get the resource .