作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习Rust和Tokio,我怀疑我可能走错了方向。
我正在尝试打开与远程服务器的连接并执行握手。我想使用非阻塞IO,所以我在使用Tokio的线程池。需要快速执行握手,否则 Remote 将关闭套接字,因此我试图在单个block_on节中链接消息交换:
let result: Result<(), Box<dyn std::error::Error>> = session
.runtime()
.borrow_mut()
.block_on(async {
let startup = startup(session.configuration());
stream.write_all(startup.as_ref()).await?;
let mut buffer:Vec<u8> = Vec::new();
let mut tmp = [0u8; 1];
loop {
let total = stream.read(&mut tmp).await;
/*
if total == 0 {
break;
}
*/
if total.is_err() {
break;
}
buffer.extend(&tmp);
}
Ok(())
});
我的问题是当套接字中没有更多字节要读取时该怎么办。我当前的实现读取响应,并且在最后一个字节挂起后,我相信是因为套接字未关闭。我认为检查0字节读取就足够了,但对read()的调用再也不会返回。
最佳答案
根据您的评论:
Nope, the connection is meant to remain open.
关于rust - 如何在block_on节中交换数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64535642/
tokio::runtime::Handle.block_on 与 tokio::runtime::Runtime.block_on 有何不同? Handle.block_on 导致一些代码挂起,而
我正在关注 Rust 的 async/await primer但是我无法运行如下所示的 hello world 程序。 use futures::executor::block_on; async f
我是一名优秀的程序员,十分优秀!