ASIO 中存在独立接收器 class 背后的设计原理
Design rationale behind that separate acceptor class exists in ASIO
我想了解为什么 ASIO 有专门的 tcp::acceptor
class。
在幕后,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));
这种区别提高了接口的抽象度,使正确使用API变得更加容易。
To put it bluntly, you could say it's because it's a C++ API, not BSD sockets.
当您问为什么 socket
是一个带有方法的对象(而不是仅仅传递句柄,真的更简单吗?)时,您会得到相同的答案。或者为什么 类 都是在协议上模板化的(还记得像 (struct sockaddr_in *) p->ai_addr
这样的转换吗?你会看到它的优点)。
我想了解为什么 ASIO 有专门的 tcp::acceptor
class。
在幕后,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));
这种区别提高了接口的抽象度,使正确使用API变得更加容易。
To put it bluntly, you could say it's because it's a C++ API, not BSD sockets.
当您问为什么 socket
是一个带有方法的对象(而不是仅仅传递句柄,真的更简单吗?)时,您会得到相同的答案。或者为什么 类 都是在协议上模板化的(还记得像 (struct sockaddr_in *) p->ai_addr
这样的转换吗?你会看到它的优点)。