我正在尝试使用mio来构建一个高性能的tcp服务器。我从这里的例子https://github.com/tokio-rs/mio/blob/master/examples/tcp_server.rs开始,用hyperfine运行这个代码,作为一种基准测试/测试服务器。
fn main() {
let mut stream = TcpStream::connect("127.0.0.1:9000").expect("Failed to connect to server.");
stream.write("some_data".as_bytes()).unwrap();
}
这总是与下列错误相错
Error: Os { code: 54, kind: ConnectionReset, message: "Connection reset by peer" }
从示例中的第156行抛出。
我明白这是预期的行为,如果这个错误被抛出,我试图理解什么会导致TcpStream抛出这个错误摆在首位。我觉得这个例子应该处理相当多的负载。
此外,如果这可能不是最好的地方开始与Mio建设,我会很感激任何指针,在哪里看。
1条答案
按热度按时间wkyowqbh1#
如果套接字关闭而仍有未读数据,则TCP堆栈将发出TCP重置。此TCP重置将导致对等方出现“Connection reset by peer”(ECONNRESET)错误。
您链接到的服务器写入数据和读取数据。您的客户端只写入数据,但关闭连接而不从服务器阅读数据。这意味着当客户端关闭时,存在来自服务器的未读数据,导致客户端TCP堆栈生成TCP重置,并且服务器获得“Connection reset by peer”。