< 返回版块

51coder 发表于 2022-06-19 15:54

use anyhow::{anyhow, Result}; use s2n_quic::Server;

const CERT_PEM: &str = include_str!("../fixtures/cert.pem"); const KEY_PEM: &str = include_str!("../fixtures/key.pem");

#[tokio::main] async fn main() -> Result<()> { let addr = "127.0.0.1:4433"; let mut server = Server::builder() .with_tls((CERT_PEM, KEY_PEM))? .with_io(addr)? .start() .map_err(|e| anyhow!("Failed to start server. Error:{e}"))?;

    println!("Listening on {}", addr);

    while let Some(mut conn) = server.accept().await {
        println!("Accepted connection from {}", conn.remote_addr()?);

        tokio::spawn(async move{
            while let OK(Some(mut stream)) = conn.accept_bidirectional_stream().await {
                println!("Accepted bidirectional stream from {}",stream.connection().remote_addr()?);

                //echo back
                tokio::spawn(async move {
                    while let OK(Some(data)) = stream.receive().await {
                        stream.send(data).await?;
                    }
                    OK::<(),anyhow::Error>(())

                });
            }
            OK::<(),anyhow::Error>(()) 
            
        });
    }

}

报错信息:

error[E0670]: async fn is not permitted in Rust 2015 --> server.rs:8:1 | 8 | async fn main() -> Result<()> { | ^^^^^ to use async fn, switch to Rust 2018 or later | = help: set edition = "2021" in Cargo.toml// 这个我更改了cargo版本也不行 = note: for more on editions, read https://doc.rust-lang.org/edition-guide

error: expected one of !, ), ,, ., ::, ?, {, or an operator, found keyword move --> server.rs:21:32 | 21 | tokio::spawn(async move{ | ^^^^ expected one of 8 possible tokens //是move有问题?

error: aborting due to 2 previous errors

评论区

写评论
苦瓜小仔 2022-06-19 20:06
#[tokio::main]
async fn main() -> Result<()> {
    let addr = "127.0.0.1:4433";
    let mut server: Server =
        Server::builder().with_tls((CERT_PEM, KEY_PEM))?
                         .with_io(addr)?
                         .start()
                         .map_err(|e| anyhow!("Failed to start server. Error:{e}"))?;

    println!("Listening on {}", addr);

    while let Some(mut conn) = server.accept().await {
        println!("Accepted connection from {}", conn.remote_addr()?);

        tokio::spawn(async move {
            while let Ok(Some(mut stream)) = conn.accept_bidirectional_stream().await {
                println!("Accepted bidirectional stream from {}",
                         stream.connection().remote_addr()?);

                // echo back
                tokio::spawn(async move {
                    while let Ok(Some(data)) = stream.receive().await {
                        stream.send(data).await?;
                    }
                    anyhow::Ok(())
                });
            }
            anyhow::Ok(())
        });
    }
    Ok(())
}
githik999 2022-06-19 19:17

看上去像版本问题

为什么这么低的版本 是库的问题吗 正常来说 toml 里面的新建项目按现在来说都是2021才对

1 共 2 条评论, 1 页