2017-04-11 24 views
0

は、実行時にアクセス違反をスローする小さなスニペットです。ラインでアクセス違反がブーストファイル「socket_ops.ipp」で発生しているブーストソケットAsync_Connectアクセス違反

m_socket.async_connect(end_point, yieldw[ec]); 

を呼び出すときに、私は、Visual Studio 2015およびブースト1.60.0とを

"socket_type s = error_wrapper(::WSASocketW(af, type, protocol, 0, 0,WSA_FLAG_OVERLAPPED),ec);" 

例外は、「未処理されて使用していますConsoleApplication4.exeの0x000007FEFD598A2F(KernelBase.dll)の例外:0xC0000005:アクセス違反が0xFFFFFFFFFFFFFFFFの場所を読み取っています。

#include "stdafx.h" 
#include <memory> 
#include <boost/asio/io_service.hpp> 
#include <boost/asio/ip/tcp.hpp> 
#include <boost/asio/spawn.hpp> 
#include <boost/asio/write.hpp> 
#include <cassert> 
#include <thread> 
#include <chrono> 

int main() 
{ 

boost::asio::io_service m_io_service; 
//boost::asio::io_service::strand m_socket_strand{ m_io_service }; 
boost::asio::io_service::work m_work(m_io_service); 
boost::asio::ip::tcp::socket m_socket(m_io_service); 

std::thread thread([&]() { 
    m_io_service.run(); 
}); 

boost::asio::ip::tcp protocol_family{ boost::asio::ip::tcp::v4() }; 
boost::asio::ip::tcp::resolver::query query(protocol_family, "localhost", std::to_string(2101)); 

boost::asio::ip::tcp::resolver resolver(m_io_service); 

boost::asio::ip::tcp::resolver::iterator iterator{ resolver.resolve(query) }; // Hosts can have multiple addresses. 
/*boost::asio::ip::tcp::resolver::iterator end_iterator{ iterator }; 
end_iterator++; 
boost::asio::ip::tcp::resolver::iterator end; 

if (end_iterator != end) 
{ 
    std::ostringstream endpoint_descripiton; 
}*/ 

assert(iterator != boost::asio::ip::tcp::resolver::iterator()); 

auto end_point = iterator->endpoint(); 

boost::asio::spawn(m_io_service, [&, end_point](boost::asio::yield_context yieldw) 
{ 
    boost::system::error_code ec; 

    m_socket.async_connect(end_point, yieldw[ec]); 

    if (ec != boost::system::errc::success) 
    { 
     std::this_thread::sleep_for(std::chrono::seconds(5)); 
    } 
    else 
    { 
    } 

}); 


std::this_thread::sleep_for(std::chrono::seconds(20)); 
return 0; 

}

答えて

0

[OK]を周りに掘った後、私はこの問題は場合にのみ罰金、x64のデバッグ中に私のためのすべての他の構成を発生見つけました。だから私は多分セットアップやライブラリに何か間違っていると思った。最新のブースト1_63_0を試してエラーが解消したことを確認した後、エラーが再現するまでバージョンを追跡して、最後の作業コピーのリリースノートを確認しました。私は次のものを見つけましたhttps://svn.boost.org/trac/boost/ticket/12215これは私が持っていたのと同じ問題があります。 boost 1_62_0以降を使用すると、問題が修正されます。