rust activx-web中的HttpServer::listen()和HttpServer::bind()有什么区别?

k7fdbhmy  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(118)

我目前正在开发一个actix-web应用程序,但我很难理解HttpServer.listen()HttpServer.bind()的不同之处,以及这些函数的作用。

fcipmucu

fcipmucu1#

HttpServer::bind获取一个(一堆)套接字地址,解析它们,打开相应的连接,然后侦听。
HttpServer::listen只是在听。
rustdoc在大多数函数旁边都有一个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)
    }
cfh9epnr

cfh9epnr2#

有一个实际的区别,在Rust的Zero to Production一书中,在第40页。当你想绑定到端口0时,它将调用从bind更改为listen,这是linux表示你想绑定到随机端口的方式。使用listen,应用程序可以告诉您它实际接收的是哪个端口。

相关问题