1

boost::asio を使用して、TCP ソケットを介してポート 443 で HTTPS GET メッセージを graph.facebook.com に送信しています。自宅のLinuxボックスでこれを行うと、async_connectが即座に通過し、すべて問題ありません。ただし、ラックスペース Linux サーバー (これも Ubuntu) でこの同じコードを実行すると、接続が確立される前に async_connect が毎回約 20 ~ 30 秒間ハングします。これが私のコードです

boost::asio::io_service Server::m_ioService;
boost::asio::ssl::context Server::m_ctx(boost::asio::ssl::context::sslv23);

boost::shared_ptr<boost::asio::io_service::work> m_work(new boost::asio::io_service::work(m_ioService);
boost::thread_group m_threads;
m_ctx.set_default_verify_paths();

for(int z=0; z < 4; ++z)
{
   m_threads.create_thread(boost::bind(&boost::asio::io_service::run, &m_ioService));
}

boost::asio::ip::tcp::resolver m_resolver;
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> m_sslSocket;
boost::asio::streambuf m_request;

m_sslSocket.set_verify_mode(boost::asio::ssl::verify_peer);
m_sslSocket.set_verify_callback(boost::asio::ssl::rfc2818_verification("graph.facebook.com"));

std::ostream request_stream(&m_request);
request_stream << "GET " << a_path << " HTTP/1.0\r\n";
request_stream << "Host: " << "graph.facebook.com" << "\r\n";
request_stream << "Accept: */*\r\n";
request_stream << "Connection: close\r\n\r\n";

boost::asio::ip::tcp::resolver::query query("graph.facebook.com", "https");
m_resolver.async_resolve(query, boost::bind(&HandleResolve, this,  boost::asio::placeholders::error, boost::asio::placeholders::iterator));

void HandleResolve(const boost::system::error_code& a_err, boost::asio::ip::tcp::resolver::iterator a_endpointIterator)
{
   if(!a_err)
   {
       // Attempt a connection to each endpoint in the list until we
       // successfully establish a connection.
       std::cout << "Before connect" << std::endl;
       boost::asio::async_connect(m_sslSocket.lowest_layer(), a_endpointIterator, boost::bind(&HandleConnect, this, boost::asio::placeholders::error));
   }
   else
   {
         std::cout << "Error: " << a_err.message() << "\n";
   }
}

エラーは発生せず、接続は最終的に機能しますが、20 ~ 30 秒の遅延により、アプリケーションが使用できなくなります。どんな助けでも大歓迎です。

4

0 に答える 0