Windows上的Boost asio套接字不能async_connect

时间:2014-12-02 17:54:29

标签: c++ windows sockets boost-asio

调用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

2 个答案:

答案 0 :(得分:2)

你没有显示足够的代码。

但是,使用我的水晶球,我猜你的Win32错误代码,这可能意味着你正在使用无效的手柄。

看到您使用enable_shared_from_this,我猜可能会导致您的问题(尽管代码未显示)。

我最好的猜测是你可能在构造函数中使用shared_from_this(导致错误)。

答案 1 :(得分:1)

在Windows上,异步连接最终会调用ConnectEx(),而不是Windows Vista之前的操作系统。

所以最重要的问题,恕我直言,你试图在哪个操作系统上运行代码?

鉴于您在ConnectEx支持的操作系统上运行,下一步检查是您没有安装任何可能阻止ConnectEx使用的LSP。 (检查这个问题的最简单方法是在相关操作系统的干净安装VM上运行代码)...