2017-04-11 87 views
0

下面是一個在運行時拋出訪問衝突的小片段。我打電話Boost套接字Async_Connect訪問衝突

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

當訪問衝突是在助推文件「socket_ops.ipp」出現在該行使用Visual Studio 2015和升壓1.60.0和

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

的異常「未處理0x000007FEFD598A2F(KernelBase.dll)在ConsoleApplication4.exe中出現異常: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

好周圍挖後,我發現這個問題只在64調試發生對我來說,所有其他的配置,其中的罰款。所以我想,也許別的東西是錯誤的,我的設置或庫。在嘗試最新的提升1_63_0並發現錯誤消失之後,我通過版本進行了跟蹤,直到錯誤再次出現,然後查看最新工作副本的發行說明。我發現了以下https://svn.boost.org/trac/boost/ticket/12215,它與我遇到的問題相同。使用boost 1_62_0或更高版本可以解決問題。