boost::asio connect error



  • Hallo Leute,

    ich stehe derzeit auf dem Schlauch und hoffe mir kann da jemand weiterhelfen.

    Main:

    try
    	{
    		boost::asio::io_service io_service;
    		boost::asio::ip::tcp::resolver resolver(io_service);
    		boost::asio::ip::tcp::resolver::query query("79.110.84.75", "4001"); 
    
    		boost::system::error_code ec;
    		auto endpoint_iterator = resolver.resolve(query, ec);
    		if(!ec)
    		{
    			NT::Client client(io_service, endpoint_iterator);
    		} else
    		{
    			std::cout << "Resolve Error: " << ec.message() << std::endl;
    			return 1;
    		}
    
    		io_service.run();
    	} catch(std::exception &e)
    	{
    		std::cout << e.what() << std::endl;
    	}
    

    NT::Client Konstruktor:

    NT::Client::Client(boost::asio::io_service& io_service, 
    				   const boost::asio::ip::tcp::resolver::iterator& endpoint_iterator) 
    				   : _socket(io_service), _io_service(io_service)
    {
    	Connect(endpoint_iterator);
    }
    

    NT::Client Connect:

    void NT::Client::Connect(const boost::asio::ip::tcp::resolver::iterator& endpoint_iterator)
    {
    	boost::asio::async_connect(_socket, endpoint_iterator, 
    		[this](const boost::system::error_code& ec, const boost::asio::ip::tcp::resolver::iterator&) 
    	{
    		if(!ec)
    		{
    			BeginReceive();
    		} else
    		{
    			std::cout << "Connect Error: " << message.value() << std::endl;
    			_socket.close();			
    		}
    	} );
    }
    

    Allerdings failed Connect mit Fehler Code: 995

    Der E/A-Vorgang wurde wegen eines Threadendes oder einer Anwendun
    gsanforderung abgebrochen

    Allerdings währe noch zu erwähnen, dass am Server die Verbindung ankommt. 😕
    Weshalb wird mir der Error geschmissen?

    Ich bedanke mich schonmal,

    Mit freundlichen Grüßen
    Myrtaos



  • Ahja...
    Das soll natürlich

    std::cout << "Connect Error: " << ec.message() << std::endl;

    heißen.



  • Du zerstörst das Socket noch bevor du run() aufrufst.



  • Hm Tatsache, jetzt rufe ich run() vorher auf und es klappt.
    Bei den Beispielen von boost::asio wird run() auch erst am Ende aufgerufen was bei mir zur Verwirrung gesorgt hat.
    Ich bedanke mich bei dir.



  • Wobei, die Callback Funktion wird jetzt nicht mehr aufgerufen, wenn run() vorher gecalled wurde. :<


Log in to reply