# Module hyper::client::connect [−] [src]

Connectors used by the `Client`.

This module contains:

- A default `HttpConnector` that does DNS resolution and establishes connections over TCP.
- Types to build custom connectors.

# Connectors

A “connector” is a `Service` that takes a `Uri` destination, and its `Response` is some type implementing `AsyncRead`, `AsyncWrite`, and `Connection`.

## Custom Connectors

A simple connector that ignores the `Uri` destination and always returns a TCP connection to the same address could be written like this:

ⓘ

    let connector = tower::service_fn(|_dst| async {
        tokio::net::TcpStream::connect("127.0.0.1:1337")
    })

Or, fully written out:

    use std::{future::Future, net::SocketAddr, pin::Pin, task::{self, Poll}};
    use hyper::{service::Service, Uri};
    use tokio::net::TcpStream;

    #[derive(Clone)]
    struct LocalConnector;

    impl Service<Uri> for LocalConnector {
        type Response = TcpStream;
        type Error = std::io::Error;
        // We can't "name" an `async` generated future.
        type Future = Pin<Box<
            dyn Future<Output = Result<Self::Response, Self::Error>> + Send
        >>;

        fn poll_ready(&mut self, _: &mut task::Context<'_>) -> Poll<Result<(), Self::Error>> {
            // This connector is always ready, but others might not be.
            Poll::Ready(Ok(()))
        }

        fn call(&mut self, _: Uri) -> Self::Future {
            Box::pin(TcpStream::connect(SocketAddr::from(([127, 0, 0, 1], 1337))))
        }
    }

It’s worth noting that for `TcpStream`s, the `HttpConnector` is a better starting place to extend from.

Using either of the above connector examples, it can be used with the `Client` like this:

    // let connector = ...

    let client = hyper::Client::builder()
        .build::<_, hyper::Body>(connector);

## Modules

dns | DNS Resolution used by the `HttpConnector`.

## Structs

Connected | Extra information about the connected transport.
HttpConnector | A connector for the `http` scheme.
HttpInfo | Extra information about the transport when an HttpConnector is used.

## Traits

Connect | Connect to a destination, returning an IO transport.
Connection | Describes a type returned by a connector.