【问题标题】:How to create a BufReader for an openssl::ssl::SslStream?如何为 openssl::ssl::SslStream 创建一个 BufReader?
【发布时间】:2020-05-10 21:14:36
【问题描述】:

我尝试从我的应用程序创建一个 BufReader。 它适用于 TcpStream,但我认为无法为 SslStream 做到这一点。

我试过了:

 self.buf_reader = Some(BufReader::new(
     self.ssl_stream.as_ref().unwrap().get_ref().unwrap(),
 ));

与:

    ssl_stream: Option<SslStream<TcpStream>>,
    buf_reader: Option<BufReader<TcpStream>>,

但是在读取缓冲区时,数据显然仍然是加密的(因为它克隆了底层流而不是 SslStream)。

有什么想法吗?

【问题讨论】:

    标签: rust openssl


    【解决方案1】:

    你应该能够做到这一点:

    BufReader::new(ssl_stream.unwrap())
    

    编辑:这是一个完整的例子。

    use openssl::ssl::SslStream;
    use std::net::TcpStream;
    use std::io::BufReader;
    
    struct Test {
        ssl_stream: Option<SslStream<TcpStream>>,
        buf_reader: Option<BufReader<SslStream<TcpStream>>>,
    }
    
    impl Test {
        fn test(&mut self) {
            if let Some(s) = self.ssl_stream.take() {
                self.buf_reader = Some(BufReader::new(s));
            }
        }
    }
    

    还有一点需要注意的是,BufReader 会消耗 SslStream。在上面的示例中,我使用take() 来移动流,而不是尝试使用引用。

    【讨论】:

    • 谢谢@Sean。我试过了:self.buf_reader = Some(BufReader::new(self.ssl_stream.as_mut().unwrap())); 但我有以下错误:`不匹配的类型预期结构'openssl::ssl::SslStream',发现可变参考说明:预期结构'openssl::ssl::SslStream<:net: :tcpstream>' 找到可变引用 '&mut openssl::ssl::SslStream<:net::tcpstream>'rustc(E0308) mod.rs(431, 47): 预期结构 'openssl::ssl::SslStream' ,找到可变引用`我需要将 ReadBuff 传递到该结构中,以便进一步调用函数。
    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多