Я хочу создать Vec
и добавить к нему соединение с открытым сокетом. Когда я запускаю код, я получаю borrowed value does not live long enough
. Я видел много вопросов и ответов о переполнении стека для этой ошибки, но я не мог понять, как ее решить для rustls::Streams
.
После создания массива rustls::Stream
я хочу использовать другой l oop и отправлять данные с открытыми потоками.
use rustls::{ClientConfig, ClientSession, Session, TLSError};
use std::env;
use std::fmt;
use std::sync::Arc;
use std::time::Instant;
use webpki;
use webpki_roots;
fn main() {
let mut config = rustls::ClientConfig::new();
config
.root_store
.add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS);
let arc = std::sync::Arc::new(config);
let mut connectors = Vec::new();
let now = Instant::now();
{
for n in 1..=2 {
let mut socket = std::net::TcpStream::connect("X.X.X.X:443").unwrap();
let dns_name = webpki::DNSNameRef::try_from_ascii_str("X.com").unwrap();
let mut client = rustls::ClientSession::new(&arc, dns_name);
let mut stream = rustls::Stream::new(&mut client, &mut socket); // Create stream
connectors.push(stream);
}
}
let elapsed = now.elapsed();
println!("Elapsed: {:?}", elapsed);
//AND LATER I'M GONNA ITERATE THROUGH THE VECTOR AND USE IT TO SEND DATA.
}
Ошибка:
error[E0597]: `client` does not live long enough
--> src/main.rs:38:50
|
38 | let mut stream = rustls::Stream::new(&mut client, &mut socket); // Create stream
| ^^^^^^^^^^^ borrowed value does not live long enough
39 | let data_ref = &mut stream;
40 | connectors.push(data_ref);
| ---------- borrow later used here
41 | }
| - `client` dropped here while still borrowed
error[E0597]: `socket` does not live long enough
--> src/main.rs:38:63
|
38 | let mut stream = rustls::Stream::new(&mut client, &mut socket); // Create stream
| ^^^^^^^^^^^ borrowed value does not live long enough
39 | let data_ref = &mut stream;
40 | connectors.push(data_ref);
| ---------- borrow later used here
41 | }
| - `socket` dropped here while still borrowed
error[E0597]: `stream` does not live long enough
--> src/main.rs:39:28
|
39 | let data_ref = &mut stream;
| ^^^^^^^^^^^ borrowed value does not live long enough
40 | connectors.push(data_ref);
| ---------- borrow later used here
41 | }
| - `stream` dropped here while still borrowed