public function sendRequest(RequestInterface $request)
	{
		$response = $this->createResponse();
		$options  = $this->createOptions($request, $response);

		// Reset cURL handler
		if (is_resource($this->ch)) {
			if (function_exists('curl_reset')) {
				curl_reset($this->ch);
			}
			else {
				curl_close($this->ch);
				$this->ch = curl_init();
			}
		}
		else {
			$this->ch = curl_init();
		}

		// Setup the cURL request
		curl_setopt_array($this->ch, $options);

		// Execute the request
		curl_exec($this->ch);

		// Check for any request errors
		switch (curl_errno($this->ch)) {
			case CURLE_OK:
				break;
			case CURLE_COULDNT_RESOLVE_PROXY:
			case CURLE_COULDNT_RESOLVE_HOST:
			case CURLE_COULDNT_CONNECT:
			case CURLE_OPERATION_TIMEOUTED:
			case CURLE_SSL_CONNECT_ERROR:
				throw new NetworkException(curl_error($this->ch), $request);
			default:
				throw new RequestException(curl_error($this->ch), $request);
		}

		// Get the response
		$response = $response->getResponse();

		// Seek to the beginning of the request body
		$response->getBody()->seek(0);

		return $response;
	}