跳到主要内容

Acceptor

结构体 Acceptor 

Source
pub struct Acceptor { /* private fields */ }
展开描述

Handle 一个 server-side connection before configuration is available.

Acceptor allows the caller 到 choose 一个 ServerConfig after reading the super::ClientHello of an incoming connection. This is useful 用于 servers that choose different certificates 或 cipher suites based on the characteristics of the ClientHello。 In particular it is useful 用于 servers that need 到 do some I/O 到 加载 一个 certificate 并 its 私钥 并 don’t want 到 use the blocking interface provided by super::ResolvesServerCert

使用 Acceptor::default() 创建 Acceptor

§Example

use rustls::server::{Acceptor, ServerConfig};
let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap();
for stream in listener.incoming() {
    let mut stream = stream.unwrap();
    let mut acceptor = Acceptor::default();
    let accepted = loop {
        acceptor.read_tls(&mut stream).unwrap();
        if let Some(accepted) = acceptor.accept().unwrap() {
            break accepted;
        }
    };

    // For some user-defined choose_server_config:
    let config = choose_server_config(accepted.client_hello());
    let conn = accepted
        .into_connection(config)
        .unwrap();

    // Proceed with handling the ServerConnection.
}

实现§

Source§

impl Acceptor

Source

pub fn read_tls(&mut self, rd: &mut dyn Read) -> Result<usize, Error>

从以下来源读取 TLS 内容 rd

Returns an error if this Acceptor has already yielded an Accepted。 For more details, refer 到 Connection::read_tls()

Source

pub fn accept(&mut self) -> Result<Option<Accepted>, (Error, AcceptedAlert)>

Check if 一个 ClientHello message has been received.

Returns Ok(None) if the complete ClientHello has not yet been received. Do more I/O 并 then call 此函数 again.

Returns Ok(Some(已接受)) if the connection has been 已接受. Call 已接受.into_connection() 到 continue. Do not call 此函数 again.

Returns Err((err, alert)) if an error occurred. If an alert is returned, the application should call alert.write() 到 send the alert 到 the client. It should not call accept() again.

Trait 实现§

Source§

impl Default for Acceptor

Source§

fn default() -> Self

Return an empty Acceptor, ready 到 receive bytes 从 新 client connection.

自动 Trait 实现§

Blanket 实现§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows 从 an owned value. 更多信息
Source§

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

Source§

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

Mutably borrows 从 an owned value. 更多信息
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

原样返回传入的参数。

Source§

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

Source§

fn into(self) -> U

Calls U::从(self)

That is, this conversion is whatever the implementation of From<T> 用于 U 的实现方式。

Source§

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

Source§

type Error = Infallible

转换出错时返回的类型。
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

转换出错时返回的类型。
Source§

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

执行转换。