我试图了解ASIO为什么有专用的tcp::acceptor
类。
在后台,tcp::acceptor
和tcp::socket
都包含int socket_fd
,不是吗?
为什么不只是将tcp::acceptor
的唯一功能添加到tcp::socket
中呢? tcp::socket
可以执行低级int socket_fd
可以完成的任何操作,listen
和accept
除外。
(我是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/