#include #include #include #include using boost::asio::ip::tcp; class tcp_client { public: tcp_client(boost::asio::io_service& io_service, tcp::endpoint& endpoint, long long timeout = 3000000) :m_io_service(io_service), m_endpoint(endpoint), m_timer(io_service), m_timeout(timeout) { connect(); } void stop() { m_socket->close(); } private: void connect() { m_socket.reset(new tcp::socket(m_io_service)); std::cout << "TCP Connection in progress" << std::endl; m_socket->async_connect(m_endpoint, boost::bind(&tcp_client::handle_connect, this, m_socket, boost::asio::placeholders::error) ); m_timer.expires_from_now(boost::posix_time::microseconds(m_timeout)); m_timer.async_wait(boost::bind(&tcp_client::HandleWait, this, boost::asio::placeholders::error)); } void handle_connect(boost::shared_ptr socket, const boost::system::error_code& error) { if (!error) { std::cout << "TCP Connection : connected !" << std::endl; m_timer.expires_at(boost::posix_time::pos_infin); // Stop the timer ! // Read normally } else { std::cout << "TCP Connection failed" << std::endl; } } public: void HandleWait(const boost::system::error_code& error) { if (!error) { std::cout << "Connection not established..." << std::endl; std::cout << "Trying to close socket..." << std::endl; stop(); return; } } boost::asio::io_service& m_io_service; boost::shared_ptr m_socket; tcp::endpoint m_endpoint; boost::asio::deadline_timer m_timer; long long m_timeout; }; int main() { boost::asio::io_service io_service; tcp::endpoint endpoint(boost::asio::ip::address_v4::from_string("192.168.10.74"), 7171); // invalid address tcp_client tcpc(io_service, endpoint); io_service.run(); system("pause"); }