Я изучаю библиотеки С++ для портативных, блокирующих доступ ввода-вывода к файловой системе и сети. Похоже, что boost::filesystem
, boost::iostreams
и boost::asio
будут выполнять эту работу втроем.
Чтобы было ясно, в настоящее время меня не интересуют асинхронные аспекты boost::asio
; Я просто хочу портативный, блокирующий интерфейс к сети.
Копаясь, я вижу, что boost::iostreams
имеет понятие устройств, каждое из которых имеет связанный концепция режима. Двунаправленный режим кажется специально адаптированным для потокового доступа к полнодуплексному TCP-соединению. Потрясающий.
boost::iostreams
, похоже, не предлагает поддержку для фактического открытия TCP-соединений (в отличие от локальной файловой системы). Это нормально, конечно, boost::asio
позволит мне открыть соединение, соответствующим образом смоделировать его как двунаправленное Device
и обернуть его в boost::iostreams::stream
.
..кроме этого не будет? Я вижу boost::asio::ip::tcp::iostream
, который заменит boost::iostreams::stream
, но, по-видимому, не будет действовать как Device
.
Я понимаю, что tcp::iostream
будет действовать аналогично, но я все же предпочитаю учиться и кодировать только один интерфейс, а не два. В частности, работа с двумя режимами обработки ошибок и иерархиями исключений не очень приятна.
Итак, вопрос: я слепой? Возможно, существует адаптер между двумя библиотеками, который я пропустил. Или, может быть, кто-то уже выпустил такой адаптер в качестве стороннего компонента, который я мог бы забросить?