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

在后台,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));

这种区别提高了接口(interface)的抽象性,并使得更容易正确使用API​​。



当您问为什么socket用方法成为对象时,您会得到相同的答案(而不是仅仅传递句柄,实际上要简单得多)。或为什么所有类都在协议(protocol)上进行模板化(请记住像(struct sockaddr_in *) p->ai_addr这样的强制转换?您会看到优点)。

关于c++ - ASIO中存在单独的接受器类的设计原理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46525643/

10-11 22:46
查看更多