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
impl Acceptor
Sourcepub fn read_tls(&mut self, rd: &mut dyn Read) -> Result<usize, Error>
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()。
Sourcepub fn accept(&mut self) -> Result<Option<Accepted>, (Error, AcceptedAlert)>
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.