Вы действительно подключаетесь к удаленному разъему? Например. через socket::async_connect()
?
Если нет, откуда следует читать данные?
Здесь есть еще одна проблема:
boost::array<unsigned char, 128> buf;
boost::asio::async_read(socket_, boost::asio::buffer(buf),
boost::bind(&tcp_connection::handle_readConnection, shared_from_this(), boost::asio::placeholders::error, boost::ref(buf)));
Вы просите asio асинхронно читать в буфер, который находится в стеке.
Как только функция возвращает адрес (который еще сохраняет asio), он становится недействительным, и попытка чтения может перезаписать любой тип памяти в стеке.
Начиная с этого момента вы более или менее настроены неопределенно, что может быть причиной того, что обратный вызов никогда не вызывается.
Буфер должен всегда переживать продолжительность попытки чтения.
Другая вещь, где время жизни должно быть действительным, относится к io_ref
. Он не должен уничтожаться, пока активен любой экземпляр tcp_connection::pointer
. Поскольку мы не видим этот код, трудно сказать. Если это глобальная переменная или часть основной функции, то, вероятно, все в порядке.