提升 Asio tcp::接受者访问冲突异常
Boost Asio tcp::acceptor access violation exception
我正在尝试并排创建一个tcp::acceptor
和一个libtorrent::session
,但是在等待std::cin
输入时出现访问冲突异常。访问冲突发生在 Boost IOCP 实施中,如堆栈跟踪所示。
- Windows 8.1
- MSVC 12.0 (Visual Studio 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
会使访问冲突异常消失。
这是什么原因造成的?
我遇到了同样的问题。通过在预处理器定义中添加BOOST_ASIO_ENABLE_CANCELIO
,我得到了帮助。在这里您可以找到更多信息。
我遇到了同样的问题,我的代码没有任何错误,确实使用了另一个接受器工人的构造函数,这对我来说是崩溃的:
this->acceptor = boost::make_shared<boost::asio::ip::tcp::acceptor>(io_service_, endpoint);
而这不是
this->acceptor = boost::make_shared<boost::asio::ip::tcp::acceptor>(io_service_, endpoint.protocol());
注意 protocol() 调用,我正在使用另一个构造函数,令人惊讶的是这有效......
相关文章:
- 写入访问冲突异常
- 在C++中删除双向链表的头节点后出现访问冲突异常
- Visual Studio图形调试器引发读取访问冲突异常
- 尝试将 std::cerr 重定向到文件时出现访问冲突异常
- 媒体基础:读取示例 - 访问冲突异常
- 链表的访问冲突异常
- 进入函数之前的访问冲突异常
- 删除函数 c++ 的读取访问冲突异常
- 无法使用 C++ catch(..) 捕获访问冲突异常
- 在Visual Studio Community中使用glfw3 glew和opengl获取访问冲突异常
- 访问动态 2D 字符数组时引发访问冲突异常
- 从静态库使用 Boost Asio 时访问冲突异常
- 为什么访问冲突异常不能被 捕获.NET4.0.
- glGenBuffers 访问冲突异常
- unsigned char*导致访问冲突异常
- 注入DLL的函数中出现访问冲突异常(5)
- 删除二叉搜索树中的节点中的 Visual Studio 中的访问冲突异常
- 提升 Asio tcp::接受者访问冲突异常
- 在 .Net 应用程序中调用 C++ DLL 时出现系统访问冲突异常
- 为什么此代码会引发访问冲突异常