我试图理解为什么ASIO有一个专用的tcp::acceptor类。
在引擎盖下,tcp::acceptor和tcp::socket都包含一个int socket_fd,不是吗?
为什么不将tcp::acceptor的独特功能添加到tcp::socket中呢?除了listen和accept,tcp::socket可以做任何低级int socket_fd可以做的事情。
(我是ASIO的新手,也许我没有看到一些基本的东西)
发布于 2017-10-02 14:06:13
他们有一套单独的行动。
另外,它们有一组单独的套接字选项,这些选项适用。
acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));这种区别提高了接口的抽象性,并使正确使用API变得更加容易。
坦率地说,您可以说这是因为它是一个BSD,而不是C++套接字。
当您问到为什么socket是一个带有方法的对象时(而不是仅仅传递句柄,真的吗?),答案是一样的。或者为什么类在协议上都是模板化的(还记得像(struct sockaddr_in *) p->ai_addr这样的强制转换吗?你会看到它的优点)。
https://stackoverflow.com/questions/46525643
复制相似问题