我目前正在开发一个actix-web应用程序,但我很难理解HttpServer.listen()和HttpServer.bind()的不同之处,以及这些函数的作用。
HttpServer.listen()
HttpServer.bind()
fcipmucu1#
HttpServer::bind获取一个(一堆)套接字地址,解析它们,打开相应的连接,然后侦听。HttpServer::listen只是在听。rustdoc在大多数函数旁边都有一个source链接,所以你实际上可以浏览到bind的代码,这非常简单:
HttpServer::bind
HttpServer::listen
source
bind
pub fn bind<A: net::ToSocketAddrs>(mut self, addrs: A) -> io::Result<Self> { let sockets = self.bind2(addrs)?; for lst in sockets { self = self.listen(lst)?; } Ok(self) }
cfh9epnr2#
有一个实际的区别,在Rust的Zero to Production一书中,在第40页。当你想绑定到端口0时,它将调用从bind更改为listen,这是linux表示你想绑定到随机端口的方式。使用listen,应用程序可以告诉您它实际接收的是哪个端口。
listen
2条答案
按热度按时间fcipmucu1#
HttpServer::bind
获取一个(一堆)套接字地址,解析它们,打开相应的连接,然后侦听。HttpServer::listen
只是在听。rustdoc在大多数函数旁边都有一个
source
链接,所以你实际上可以浏览到bind
的代码,这非常简单:cfh9epnr2#
有一个实际的区别,在Rust的Zero to Production一书中,在第40页。当你想绑定到端口0时,它将调用从
bind
更改为listen
,这是linux表示你想绑定到随机端口的方式。使用listen
,应用程序可以告诉您它实际接收的是哪个端口。