Это правда, что библиотеки TLS с включенной асинхронной / ожидающей поддержкой, такие как tokio-tls
, требуют, чтобы указанный поток не был разделен, однако после того, как вы завернули свой поток в слой TLS, вы можете разделить что обернутый поток с использованием tokio::io::split
.
Использование потоков таким образом правильно обрабатывает все детали, касающиеся блокирующего и неблокирующего ввода-вывода. Вам не нужно вручную настраивать флаги, такие как O_NONBLOCK
, поскольку TcpStream
и 1016 *TlsStream
Токио обрабатывают эти детали для вас за кулисами.
Использование библиотеки, которая предоставляет блокирующие сокеты, естественно, было бы несовместимо с Tokio. Это не ново и по тем же причинам, по которым вы не можете использовать std::net::TcpStream
в Tokio, так как это блокирующий поток. Tokio предоставляет альтернативные типы потоков для этих целей, чтобы избежать этих проблем.
Если вы хотите использовать ssl-ящик, не поддерживающий асинхронность / ожидание, вы можете выполнить шифрование в буферах в памяти и вручную записать зашифрованные данные с использованием Токио TcpStream
. Все ssl-библиотеки с поддержкой async / await функционируют таким образом.