2015-01-08 3 views
6

tcp::acceptorlibtorrent::session을 나란히 만들려고하지만 입력을 기다릴 때 액세스 위반 예외가 발생합니다 (std::cin). 스택 추적에 표시된 것처럼 부스트 IOCP 구현에서 액세스 위반이 발생합니다.부스트 Asio tcp :: acceptor 액세스 위반 예외

  • 윈도우 8.1
  • MSVC 12.0 (비주얼 스튜디오 2013)
  • 부스트 v1.57.0
  • libtorrent - rasterbar의 V1.0.3

내가 문제를 재현 할 수 있습니다 최소한의 예를 들면,

#include <boost/asio.hpp> 
#include <libtorrent/session.hpp> 

int main(int argc, char *argv[]) 
{ 
    boost::asio::io_service io_service; 
    boost::asio::ip::tcp::acceptor acceptor(io_service); 

    libtorrent::session s; 

    std::string line; 
    std::getline(std::cin, line); // <----- trigger 

    return 0; 
} 

스택 추적은

lt_test.exe!boost::asio::detail::win_iocp_socket_service_base::do_open(boost::asio::detail::win_iocp_socket_service_base::base_implementation_type & impl, int family, int type, int protocol, boost::system::error_code & ec) Line 300 C++ 
lt_test.exe!boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::open(boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::implementation_type & impl, const boost::asio::ip::tcp & protocol, boost::system::error_code & ec) Line 192 C++ 
lt_test.exe!boost::asio::socket_acceptor_service<boost::asio::ip::tcp>::open(boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::implementation_type & impl, const boost::asio::ip::tcp & protocol, boost::system::error_code & ec) Line 144 C++ 
lt_test.exe!boost::asio::basic_socket_acceptor<boost::asio::ip::tcp,boost::asio::socket_acceptor_service<boost::asio::ip::tcp> >::open(const boost::asio::ip::tcp & protocol, boost::system::error_code & ec) Line 310 C++ 
lt_test.exe!libtorrent::aux::session_impl::setup_listener(libtorrent::listen_socket_t * s, boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> ep, int & retries, bool v6_only, int flags, boost::system::error_code & ec) Line 2089 C++ 
lt_test.exe!libtorrent::aux::session_impl::open_listen_port(int flags, boost::system::error_code & ec) Line 2243 C++ 
lt_test.exe!libtorrent::aux::session_impl::init() Line 1258 C++ 
lt_test.exe!libtorrent::aux::session_impl::main_thread() Line 4880 C++ 
lt_test.exe!boost::_mfi::mf0<void,libtorrent::aux::session_impl>::operator()(libtorrent::aux::session_impl * p) Line 50 C++ 
lt_test.exe!boost::_bi::list1<boost::_bi::value<libtorrent::aux::session_impl *> >::operator()<boost::_mfi::mf0<void,libtorrent::aux::session_impl>,boost::_bi::list0>(boost::_bi::type<void> __formal, boost::_mfi::mf0<void,libtorrent::aux::session_impl> & f, boost::_bi::list0 & a, int __formal) Line 254 C++ 
lt_test.exe!boost::_bi::bind_t<void,boost::_mfi::mf0<void,libtorrent::aux::session_impl>,boost::_bi::list1<boost::_bi::value<libtorrent::aux::session_impl *> > >::operator()() Line 21 C++ 
lt_test.exe!boost::asio::detail::win_thread::func<boost::_bi::bind_t<void,boost::_mfi::mf0<void,libtorrent::aux::session_impl>,boost::_bi::list1<boost::_bi::value<libtorrent::aux::session_impl *> > > >::run() Line 117 C++ 
lt_test.exe!boost::asio::detail::win_thread_function(void * arg) Line 118 C++ 
[External Code] 
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] 

acceptor을 제거하면 액세스 위반 예외가 사라집니다.

이 원인은 무엇입니까?

+1

libtorrent가 영향을 미칩니 까? 왜냐하면 그렇게한다면, 그것은 리드입니다. 'session' 생성자가하는 것을보세요. – sehe

답변

1

같은 문제가 발생했습니다. 전 처리기 정의에 BOOST_ASIO_ENABLE_CANCELIO을 추가하여 도움을 받았습니다. Here 자세한 정보를 찾을 수 있습니다.