ASIO中存在单独的接受器类背后的设计原理

时间:2017-10-02 12:40:15

标签: c++ boost boost-asio asio

我试图理解为什么ASIO有专门的tcp::acceptor类。

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

为什么不将tcp::acceptor的独特功能添加到tcp::sockettcp::socket除了int socket_fd& listen之外,accept可以执行任何可由低级别{{1}}执行的操作。 {{1}}。

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

1 个答案:

答案 0 :(得分:4)

他们有一套独立的操作。

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

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

这种区别引发了界面的抽象,使得更容易正确使用API​​。

  

说得直白,你可以说这是因为它是一个C ++ API,而不是BSD套接字。

当你问为什么socket成为一个带方法的对象时,你会得到同样的答案(而不仅仅是传递句柄,真的更简单?)。或者为什么这些类都是在协议上模板化的(请记住类似(struct sockaddr_in *) p->ai_addr的演员表?你会看到优点)。