다음 코드는 TcpListener의 녹 문서에서와 거의 같습니다. 코드가 Ubuntu 14.04에서 실행되면 오류가 발생하지 않지만 동시에 작동하지 않습니다! (netstat -an | grep ':80'
또는 telnet이이 서버에 연결하지 않음).녹청 TcpListener가 실패했지만 오류가 표시되지 않았습니다.
포트를 변경하면 작동합니다. listen()
뒤에 unwrap()
을 추가하면 코드에 "액세스 거부 오류"가 표시됩니다. 나는 listen()
이 IOResult<T>
을 반환한다고 읽었고 사용하지 않으면 오류가 발생하지 않습니다. 그러나 나는 이것을 acceptor.incoming()
이라고 부르며이 호출에서 오류가 발생할 것으로 예상합니다. 왜 그런 일이 일어나지 않습니까?
녹 버전 : rustc 0.13.0 - 야간 (bd7138dd6 2014년 10월 27일 23시 2분 55초 0000)
우분투 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);
}
특권 포트 (<1024)를 열기 위해서는 루트 여야합니다 – Arjan
나는 그것이 저에게 문제가되지 않는다는 것을 이해했습니다. 문제는 프로그램이 오류를 입력하지 않았다는 것입니다. –
@FedorovMikhail은'println! ("{}", e);'에 의해'/ * connection failed * /'를 대체하고 오류를 보게됩니다. – Levans