调用async_connect时出错,是
uncaught exception of type N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_6system12system_errorEEEEE
- socket_select_interrupter: The attempted operation is not supported for the type of object referenced
Demangled:
uncaught exception of type boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> > - socket_select_interrupter: The attempted operation is not supported for the type of object referenced
以下是一些相关代码:
typedef boost::shared_ptr<boost::asio::ip::tcp::socket> tTCPSocketPtr;
boost::shared_ptr<boost::asio::io_service> ioService = boost::shared_ptr<boost::asio::io_service> (new boost::asio::io_service());
socketPtr = tTCPSocketPtr(new boost::asio::ip::tcp::socket(*ioService));
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(this->ipAddress), this->port);
// Set a deadline for the connect operation.
deadline->expires_from_now(boost::posix_time::seconds(5));
socketPtr->async_connect(endpoint,
boost::bind(&AConnection::handle_connect,
shared_from_this(), _1, endpoint)); //errors out here
我用Google搜索并没有找到任何有用的东西。
我如何修复此错误? 谢谢, SB
答案 0 :(得分:2)
你没有显示足够的代码。
但是,使用我的水晶球,我猜你的Win32错误代码,这可能意味着你正在使用无效的手柄。
看到您使用enable_shared_from_this
,我猜可能会导致您的问题(尽管代码未显示)。
我最好的猜测是你可能在构造函数中使用shared_from_this
(导致错误)。
答案 1 :(得分:1)
在Windows上,异步连接最终会调用ConnectEx(),而不是Windows Vista之前的操作系统。
所以最重要的问题,恕我直言,你试图在哪个操作系统上运行代码?
鉴于您在ConnectEx支持的操作系统上运行,下一步检查是您没有安装任何可能阻止ConnectEx使用的LSP。 (检查这个问题的最简单方法是在相关操作系统的干净安装VM上运行代码)...