Хорошо! Кто-то, с кем я работаю, унаследовал эту ужасную библиотеку и выяснил мою проблему ...
Сокрытие io_service внутри класса абсолютно возможно, НО! Вы должны иметь объект io_service, определенный перед объектом сокета. Неважно, в каком порядке вы указываете суб-конструкторы.
Пример:
Works:
boost::asio::io_service io_service;
udp::socket socket_;
udp::endpoint sender_endpoint_;
enum { max_length = 1024 };
char data_[max_length];
doesn't work:
udp::socket socket_;
boost::asio::io_service io_service;
udp::endpoint sender_endpoint_;
enum { max_length = 1024 };
char data_[max_length];
Итак, вот что вызвало мою проблему.