У меня проблема в том, что asio :: async_connect не вызывает обработчик обратного вызова (в данном случае foo), даже если соединение уже установлено на стороне сервера. Это очень сбивает с толку, так как async_read / write работает, как и ожидалось.
Вот упрощенный пример
void foo(const asio::error_code& ec)
{
std::cout << "Foo called" << std::endl;
}
int main()
{
asio::io_service io;
asio::io_service::work work(io);
asio::ip::tcp::socket socket(io);
asio::ip::tcp::endpoint ep(asio::ip::address::from_string("127.0.0.1"), 5454);
socket.async_connect(ep, std::bind(&foo, std::placeholders::_1));
io.run();
return 0;
}