<html>
<head>
<!--
/*
 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/package.html $
 * $Revision: 651813 $
 * $Date: 2008-04-26 03:43:34 -0700 (Sat, 26 Apr 2008) $
 *
 * ====================================================================
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 */
-->
</head>
<body>
The client-side connection management and handling API
at the heart of what is referred to as <i>HttpConn</i>.
This component provides interfaces and implementations for
opening and managing connections.

<p>
The lowest layer of connection handling is comprised of
{@link org.apache.http.conn.OperatedClientConnection OperatedClientConnection}
and
{@link org.apache.http.conn.ClientConnectionOperator ClientConnectionOperator}.
The connection interface extends the core
{@link org.apache.http.HttpClientConnection HttpClientConnection}
by operations to set and update a socket.
An operator encapsulates the logic to open and layer sockets,
typically using a {@link org.apache.http.conn.scheme.SocketFactory SocketFactory}.
The socket factory for a protocol
{@link org.apache.http.conn.scheme.Scheme Scheme}
such as "http" or "https" can be looked up in a
{@link org.apache.http.conn.scheme.SchemeRegistry SchemeRegistry}.
Applications without a need for sophisticated connection management
can use this layer directly.
</p>

<p>
On top of that lies the connection management layer. A
{@link org.apache.http.conn.ClientConnectionManager ClientConnectionManager}
internally manages operated connections, but hands out instances of
{@link org.apache.http.conn.ManagedClientConnection ManagedClientConnection}.
This interface abstracts from the underlying socket operations and
provides convenient methods for opening and updating sockets in order
to establish a {@link org.apache.http.conn.routing.HttpRoute route}.
The operator is encapsulated by the connection manager and called
automatically.

<br/>

Connections obtained from a manager have to be returned after use.
This can be {@link org.apache.http.conn.ConnectionReleaseTrigger triggered}
on various levels, either by releasing the
{@link org.apache.http.conn.ManagedClientConnection
       connection}
directly, or by calling a method on an
{@link org.apache.http.conn.BasicManagedEntity entity}
received from the connection, or by closing the
{@link org.apache.http.conn.EofSensorInputStream stream}
from which that entity is being read.

Connection managers will try to keep returned connections alive in
order to re-use them for subsequent requests along the same route.
The managed connection interface and all triggers for connection release
provide methods to enable or disable this behavior.
</p>

</body>
</html>
