2017-04-11 88 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或更高版本可以解决问题。