Отправка данных с помощью boost::asio::socket_base

Почему в socket_base нет метода send()? По сути, я хотел бы использовать сокеты boost::asio, такие как дескрипторы сокетов linux: не имеет значения, является ли базовый сокет UDP или TCP, вы можете вызывать read(), write(), sendto() и т. д. на них.

Есть ли более правильное решение, чем просто написать класс-оболочку вокруг классов сокетов asio udp и tcp?


person user465189    schedule 16.10.2010    source источник


Ответы (1)


Вам нужно использовать определенный тип сокета, например boost::asio::ip::tcp::socket, который представляет собой потоковый сокет TCP, или boost::asio::ip::udp::socket, который предназначен для дейтаграмм. Класс socket_base — это просто базовый класс, в котором хранятся общие функции. Фактические классы сокетов содержат все функции передачи, которые вы ищете, такие как функции отправки и получения.

Как видно из документации каждый тип сокета имеет функции send и receive.

person Charles Salvia    schedule 16.10.2010
comment
Да, но я хотел бы абстрагировать тип сокета, чтобы мне не приходилось писать два набора функций (один для сокетов UDP и один для TCP). Например, в Linux я могу отправить (socket_descriptor, buf, len, flags), и он будет работать как для UDP, так и для TCP. - person user465189; 16.10.2010
comment
Boost.ASIO не использует виртуальные функции таким образом, поэтому вам нужно будет использовать шаблоны, чтобы иметь возможность написать функцию, которая принимает любой тип сокета в качестве параметра. - person Charles Salvia; 16.10.2010