看防锈圣经,有以下代码:
use std::net::TcpListener;
fn main() {
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
for stream in listener.incoming() {
let stream = stream.unwrap();
println!("Connection established!");
}
}
我想知道为什么for循环不会退出。在for循环的一次迭代之后(即,如果没有人连接),for循环是否应该结束并退出主函数?
这是有意的。从TcpListener
有关incoming()
注意事项的文档中:
返回的迭代器将永远不会返回
None
,也不会产生同位体的SocketAddr
结构。对其进行迭代等效accept
于循环调用。
并accept()
注意:
该函数将阻塞调用线程,直到建立新的TCP连接为止。
因此,它被设计为无限等待连接,直到一个连接才产生执行。
如果没有挂起的连接,您可以通过调用listener.set_nonblocking(true)
让accept
(并因此使incoming
迭代器)立即屈服并产生错误来更改此行为io::ErrorKind::WouldBlock
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句