Struct HttpConnector

pub struct HttpConnector<R = GaiResolver> { /* private fields */ }

A connector for the http scheme.

Performs DNS resolution in a thread pool, and then connects over TCP.

Note

Sets the HttpInfo value on responses, which includes transport information such as the remote socket address used.

Implementations

impl HttpConnector

fn new() -> HttpConnector

Construct a new HttpConnector.

impl<R> HttpConnector<R>

fn new_with_resolver(resolver: R) -> HttpConnector<R>

Construct a new HttpConnector.

Takes a Resolver to handle DNS lookups.

fn enforce_http(&mut self, is_enforced: bool)

Option to enforce all Uris have the http scheme.

Enabled by default.

fn set_keepalive(&mut self, time: Option<Duration>)

Set that all sockets have SO_KEEPALIVE set with the supplied duration to remain idle before sending TCP keepalive probes.

If None, keepalive is disabled.

Default is None.

fn set_keepalive_interval(&mut self, interval: Option<Duration>)

Set the duration between two successive TCP keepalive retransmissions, if acknowledgement to the previous keepalive transmission is not received.

fn set_keepalive_retries(&mut self, retries: Option<u32>)

Set the number of retransmissions to be carried out before declaring that remote end is not available.

fn set_nodelay(&mut self, nodelay: bool)

Set that all sockets have SO_NODELAY set to the supplied value nodelay.

Default is false.

fn set_send_buffer_size(&mut self, size: Option<usize>)

Sets the value of the SO_SNDBUF option on the socket.

fn set_recv_buffer_size(&mut self, size: Option<usize>)

Sets the value of the SO_RCVBUF option on the socket.

fn set_local_address(&mut self, addr: Option<IpAddr>)

Set that all sockets are bound to the configured address before connection.

If None, the sockets will not be bound.

Default is None.

fn set_local_addresses(&mut self, addr_ipv4: Ipv4Addr, addr_ipv6: Ipv6Addr)

Set that all sockets are bound to the configured IPv4 or IPv6 address (depending on host's preferences) before connection.

fn set_connect_timeout(&mut self, dur: Option<Duration>)

Set the connect timeout.

If a domain resolves to multiple IP addresses, the timeout will be evenly divided across them.

Default is None.

fn set_happy_eyeballs_timeout(&mut self, dur: Option<Duration>)

Set timeout for RFC 6555 (Happy Eyeballs) algorithm.

If hostname resolves to both IPv4 and IPv6 addresses and connection cannot be established using preferred address family before timeout elapses, then connector will in parallel attempt connection using other address family.

If None, parallel connection attempts are disabled.

Default is 300 milliseconds.

fn set_reuse_address(&mut self, reuse_address: bool) -> &mut Self

Set that all socket have SO_REUSEADDR set to the supplied value reuse_address.

Default is false.

fn set_interface<S: Into<String>>(&mut self, interface: S) -> &mut Self

Sets the name of the interface to bind sockets produced by this connector.

On Linux, this sets the SO_BINDTODEVICE option on this socket (see man 7 socket for details). On macOS (and macOS-derived systems like iOS), illumos, and Solaris, this will instead use the IP_BOUND_IF socket option (see man 7p ip).

If a socket is bound to an interface, only packets received from that particular interface are processed by the socket. Note that this only works for some socket types, particularly `AF_INET`` sockets.

On Linux it can be used to specify a VRF, but the binary needs to either have CAP_NET_RAW or to be run as root.

This function is only available on the following operating systems:

  • Linux, including Android
  • Fuchsia
  • illumos and Solaris
  • macOS, iOS, visionOS, watchOS, and tvOS
fn set_tcp_user_timeout(&mut self, time: Option<Duration>)

Sets the value of the TCP_USER_TIMEOUT option on the socket.

Trait Implementations

impl<R> Service<Uri> for HttpConnector<R> where R: Resolve + Clone + Send + Sync + 'static, R::Future: Send,

type Response = TokioIo<TcpStream>;
type Error = ConnectError;
type Future = HttpConnecting<R>;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>
fn call(&mut self, dst: Uri) -> Self::Future

impl<R: Clone> Clone for HttpConnector<R>

fn clone(&self) -> HttpConnector<R>

impl<R: Debug> Debug for HttpConnector<R>

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Auto Trait Implementations

impl<R> Freeze for HttpConnector<R> where R: Freeze,

impl<R> RefUnwindSafe for HttpConnector<R> where R: RefUnwindSafe,

impl<R> Send for HttpConnector<R> where R: Send,

impl<R> Sync for HttpConnector<R> where R: Sync,

impl<R> Unpin for HttpConnector<R> where R: Unpin,

impl<R> UnsafeUnpin for HttpConnector<R> where R: UnsafeUnpin,

impl<R> UnwindSafe for HttpConnector<R> where R: UnwindSafe,

Blanket Implementations

impl<S, T> Connect for HttpConnector<R> where S: Service<Uri, Response = T> + Send + 'static, <S as Service<Uri>>::Error: Into<Box<dyn Error + Sync + Send>>, <S as Service<Uri>>::Future: Unpin + Send, T: Read + Write + Connection + Unpin + Send + 'static,

type _Svc = S;
fn connect(self, Internal, dst: Uri) -> Oneshot<S, Uri>

impl<T> Any for HttpConnector<R> where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for HttpConnector<R> where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for HttpConnector<R> where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for HttpConnector<R> where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for HttpConnector<R>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> Instrument for HttpConnector<R>

impl<T> ToOwned for HttpConnector<R> where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T> WithSubscriber for HttpConnector<R>

impl<T, U> Into<U> for HttpConnector<R> where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for HttpConnector<R> where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for HttpConnector<R> where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>