I am working with libscapi and keep getting errors when trying to establish a connection with boost::asio::connect. I have been trying to get simple examples to work (like the one below) but I always get the "connection refused" error. I guess it must be a very simple mistake but I just don't understand it.
#include <boost/asio.hpp>
#include <iostream>
int main(int argc, char* argv[]) {
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint endpoint;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query("www.boost.org", "http");
boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);
boost::asio::ip::tcp::resolver::iterator end; // End marker.
while (iter != end)
{
boost::asio::ip::tcp::endpoint endpoint = *iter++;
std::cout << endpoint << std::endl;
}
boost::asio::ip::tcp::socket socket(io_service);
socket.connect(endpoint);
}
You are passing default constructed endpoint for connect
, which is just not valid.
When you have a list of endpoints specified by [iter,end)
iterators, you should check each one of them passing it to connect
:
boost::asio::ip::tcp::socket socket(io_service);
while (iter != end)
{
boost::asio::ip::tcp::endpoint endpoint = *iter++;
std::cout << endpoint << std::endl;
boost::system::erroc_code err;
socket.connect(endpoint,err);
if ( !err ) // there is no error
{
// connection is established, we can break loop
break;
}
else {
std::cout << "ups, we have problem" << std::endl;
}
}
Simpler version would be to use free connect function which takes both iterators:
boost::asio::ip::tcp::socket socket(io_service);
boost::system::error_code err;
boost::asio::connect(socket,iter,end,err);
if (!err)
std::cout << "connected" << std::endl;