gpt4 book ai didi

rust - mio 中缓冲区类型的问题

转载 作者:行者123 更新时间:2023-11-29 08:17:01 25 4
gpt4 key购买 nike

我想使用 mio 在 Rust 中编写一个异步服务器,但我在缓冲区类型方面遇到了麻烦。我尝试了不同的缓冲区类型,但无法正常工作。我当前的代码是:

extern crate mio;
extern crate bytes;

use std::io;
use std::io::{Error, ErrorKind};
use std::net::SocketAddr;
use std::str::FromStr;
use std::io::Cursor;

use self::mio::PollOpt;
use self::mio::EventLoop;
use self::mio::EventSet;
use self::mio::Token;
use self::mio::Handler;
use self::mio::io::TryRead;
use self::mio::io::TryWrite;
//use self::mio::buf::ByteBuf;
//use self::mio::buf::Buf;
use self::mio::tcp::*;
use self::bytes::buf::Buf;
use self::bytes::buf::byte::ByteBuf;

struct EventHandler;

impl Handler for EventHandler {
type Timeout = ();
type Message = ();

fn ready(&mut self, event_loop: &mut EventLoop<EventHandler>, token: Token, events: EventSet) {
}
}

pub struct Connection {
sock: TcpStream,
send_queue: Vec<ByteBuf>,
}

impl Connection {
pub fn writable(&mut self, event_loop: &mut EventLoop<EventHandler>) -> Result<(), String> {
while !self.send_queue.is_empty() {
if !self.send_queue.first().unwrap().has_remaining() {
self.send_queue.pop();
}
let buf = self.send_queue.first_mut().unwrap();
match self.sock.try_write_buf(&mut buf) {
Ok(None) => {
return Ok(());
}
Ok(Some(n)) => {
continue;
}
Err(e) => {
return Err(format!("{}", e));
}
}
}
Ok(())
}
}

fn main() {
println!("Hello, world!");
}

Cargo.toml包含以下依赖项:

mio = "*"
bytes = "*"

目前在 Cargo.lock 中转换为字节 0.2.11 和 mio 0.4.3。

我得到的错误是这样的:

main.rs:45:29: 45:52 error: the trait `bytes::buf::Buf` is not implemented
for the type `&mut bytes::buf::byte::ByteBuf` [E0277]
main.rs:45 match self.sock.try_write_buf(&mut buf) {

我希望能够写一个 Vec<u8>进入套接字并处理缓冲区仅部分写入的情况。我怎样才能做到这一点?

我不需要解释正确处理返回值的代码,这个问题是关于缓冲区类型的。我不知道我必须使用哪种缓冲区类型。

最佳答案

问题是这样的:

let buf = self.send_queue.first_mut().unwrap();
match self.sock.try_write_buf(&mut buf) {

您将 &mut &mut ByteBuf 传递给 try_write_buf 因为 buf 已经是一个 &mut ByteBuf。只需删除额外的 &mut:

let buf = self.send_queue.first_mut().unwrap();
match self.sock.try_write_buf(buf) {

关于rust - mio 中缓冲区类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33315842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com