【发布时间】:2014-11-01 08:02:09
【问题描述】:
以下代码与 TcpListener 的 Rust 文档中的代码几乎相同。
当代码在 Ubuntu 14.04 上运行时,它不会产生任何错误,但同时它也不起作用! (netstat -an | grep ':80' 或 telnet 都没有连接到这个服务器)。
如果我更改端口,它将起作用。如果我在listen() 之后添加unwrap(),那么代码将显示“访问被拒绝错误”。我读到listen() 返回IOResult<T>,如果不使用它就不会发生错误。但我想我用它来调用acceptor.incoming(),我预计这个调用会出错。为什么没有发生?
Rust 版本:rustc 0.13.0-nightly (bd7138dd6 2014-10-27 23:02:55 +0000)
Ubuntu 14.04
fn main() {
let listener = TcpListener::bind("127.0.0.1", 80);
// bind the listener to the specified address
let mut acceptor = listener.listen(); //unwrap() here
fn handle_client(mut stream: TcpStream) {
println!("a");
}
// accept connections and process them, spawning a new tasks for each one
for stream in acceptor.incoming() {
match stream {
Err(e) => { /* connection failed */ }
Ok(stream) =>
spawn(proc() {
// connection succeeded
handle_client(stream)
})
}
}
// close the socket server
drop(acceptor);
}
【问题讨论】:
-
您必须是 root 才能打开特权端口 (
-
我明白,这对我来说不是问题。问题是程序没有输入任何错误。
-
@FedorovMikhail 将
/* connection failed */替换为println!("{}", e);,您将看到错误。
标签: rust