Логическое обоснование того, что в ASIO существует отдельный класс акцепторов
Я пытаюсь понять, почему у ASIO есть выделенный tcp::acceptor
учебный класс.
Под капотом оба tcp::acceptor
а также tcp::socket
содержать int socket_fd
не так ли?
Почему бы просто не добавить tcp::acceptor
уникальные функции в tcp::socket
? tcp::socket
может делать все, что может быть сделано на низком уровне int socket_fd
, Кроме listen
& accept
,
(Я новичок в ASIO, может быть, я не вижу ничего фундаментального)
1 ответ
У них есть отдельный набор операций.
Кроме того, они имеют отдельный набор параметров сокетов, которые применяются, например,
acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
Это различие поднимает абстракцию интерфейса и облегчает правильное использование API.
Проще говоря, вы могли бы сказать, что это потому, что это API C++, а не сокеты BSD.
Это тот же ответ, который вы получите, если бы спросили, почему socket
был сделан объект с методами (вместо того, чтобы просто передать ручку, гораздо проще на самом деле?). Или почему все классы основаны на протоколе (помните, как (struct sockaddr_in *) p->ai_addr
? Вы увидите заслугу).