2010-10-16 3 views
0

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

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

ответ

2

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

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

+0

Да, но я хотел бы абстрагировать тип сокета, так что мне не нужно писать два набора функций (один для сокетов UDP и один для TCP). Например, в linux я могу отправить send (socket_descriptor, buf, len, flags), и он будет работать как для UDP, так и для TCP. – user465189

+0

Boost.ASIO не использует виртуальные функции таким образом, поэтому вам нужно будет использовать шаблоны, чтобы иметь возможность писать функцию, которая принимает любой тип сокета в качестве параметра –

Смежные вопросы