ASIO 中存在独立接收器 class 背后的设计原理

Design rationale behind that separate acceptor class exists in ASIO

我想了解为什么 ASIO 有专门的 tcp::acceptor class。

在幕后,tcp::acceptortcp::socket 都包含一个 int socket_fd,不是吗?

为什么不直接将 tcp::acceptor 的独特功能添加到 tcp::socket 中呢? tcp::socket可以做低级int socket_fd能做的任何事情,除了listenaccept

(我是 ASIO 的新手,可能我没有看到一些基本的东西)

他们有一套独立的操作。

此外,它们还有一组单独的应用套接字选项,例如

acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));

这种区别提高了接口的抽象度,使正确使用API变得更加容易。

To put it bluntly, you could say it's because it's a C++ API, not BSD sockets.

当您问为什么 socket 是一个带有方法的对象(而不是仅仅传递句柄,真的更简单吗?)时,您会得到相同的答案。或者为什么 类 都是在协议上模板化的(还记得像 (struct sockaddr_in *) p->ai_addr 这样的转换吗?你会看到它的优点)。