我试图理解为什么ASIO有专门的tcp::acceptor
类。
在幕后,tcp::acceptor
和tcp::socket
都包含int socket_fd
,不是吗?
为什么不将tcp::acceptor
的独特功能添加到tcp::socket
? tcp::socket
除了int socket_fd
& listen
之外,accept
可以执行任何可由低级别{{1}}执行的操作。 {{1}}。
(我是ASIO的新手,也许我没有看到一些基本的东西)
答案 0 :(得分:4)
他们有一套独立的操作。
此外,它们还有一组适用的套接字选项,例如
acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
这种区别引发了界面的抽象,使得更容易正确使用API。
说得直白,你可以说这是因为它是一个C ++ API,而不是BSD套接字。
当你问为什么socket
成为一个带方法的对象时,你会得到同样的答案(而不仅仅是传递句柄,真的更简单?)。或者为什么这些类都是在协议上模板化的(请记住类似(struct sockaddr_in *) p->ai_addr
的演员表?你会看到优点)。