gpt4 book ai didi

c++ - Boost Asio tcp::acceptor 访问冲突异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:34 29 4
gpt4 key购买 nike

我正在尝试并排创建一个 tcp::acceptor 和一个 libtorrent::session,但是在等待来自std::cin。如堆栈跟踪所示,访问冲突发生在 Boost IOCP 实现中。

  • Windows 8.1
  • MSVC 12.0(Visual Studio 2013)
  • boost 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 使访问冲突异常消失。

这是什么原因造成的?

最佳答案

我遇到了同样的问题。在预处理器定义中添加 BOOST_ASIO_ENABLE_CANCELIO 对我很有帮助。 Here你可以找到更多信息。

关于c++ - Boost Asio tcp::acceptor 访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849307/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com