2017-04-11 6 views
0

아래는 실행시 액세스 위반이 발생하는 작은 스 니펫입니다. 라인에서 액세스 위반이 부스트 파일 "socket_ops.ipp"에서 발생하는부스트 소켓 Async_Connect 액세스 위반

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

를 호출 할 때 나는 비주얼 스튜디오 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

좋아 주변에 파고 후 나는이 문제는 잘, 64 디버그에 나를 위해 어디 다른 모든 구성을 발생 발견. 그래서 나는 아마도 내 설정이나 라이브러리에 뭔가 다른 것이 있다는 것을 알았습니다. 최근 부스트 1_63_0을 시도한 후 오류가 사라진 것을 발견 한 후 오류가 다시 나타나고 마지막 작업 복사본의 릴리스 노트를 확인하기 전까지 버전을 추적했습니다. 나는 다음과 같은 것을 찾았다. https://svn.boost.org/trac/boost/ticket/12215은 내가 가진 것과 동일한 이슈가있다. 부스트 1_62_0 이상을 사용하면 문제가 해결됩니다.