Логическое обоснование того, что в 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? Вы увидите заслугу).

Другие вопросы по тегам