C++ windows can';异步连接

C++ windows can';异步连接,c++,windows,sockets,boost-asio,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 要求:

调用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
要求:

boost类型的未捕获异常::异常\u详细信息::克隆\u impl-socket\u选择\u中断器:引用的对象类型不支持尝试的操作

以下是一些相关代码:

typedef boost::sharedptrttcpsocketptr;
boost::shared_ptr ioService=boost::shared_ptr(新的boost::asio::io_service());
socketPtr=tTCPSocketPtr(新的boost::asio::ip::tcp::socket(*ioService));
boost::asio::ip::tcp::endpoint端点(boost::asio::ip::address::from_字符串(this->ipAddress),this->port);
//设置连接操作的截止日期。
截止期->从现在起过期(boost::posix_time::seconds(5));
socketPtr->async_connect(端点,
boost::bind(&A)connection::handle\u connect,
从_this(),_1,endpoint()共享_//这里有错误
我在谷歌上搜索过,没有发现任何有用的东西

如何修复此错误? 非常感谢。
sb

您没有显示足够的代码

不过,使用我的水晶球,我可以猜到您得到的是Win32错误代码,这可能意味着您使用的句柄无效

看到您使用了
从\u this
启用\u shared\u,我可以猜测这会导致您的问题(尽管代码中没有显示)


我的最佳猜测是,您可能在构造函数内部使用了
shared\u from\u this
(这会导致错误)。

您没有显示足够的代码

不过,使用我的水晶球,我可以猜到您得到的是Win32错误代码,这可能意味着您使用的句柄无效

看到您使用了
从\u this
启用\u shared\u,我可以猜测这会导致您的问题(尽管代码中没有显示)


我的最佳猜测是,您可能在构造函数内部使用了
shared\u from\u this
(这会导致错误)。

您没有显示足够的代码

不过,使用我的水晶球,我可以猜到您得到的是Win32错误代码,这可能意味着您使用的句柄无效

看到您使用了
从\u this
启用\u shared\u,我可以猜测这会导致您的问题(尽管代码中没有显示)


我的最佳猜测是,您可能在构造函数内部使用了
shared\u from\u this
(这会导致错误)。

您没有显示足够的代码

不过,使用我的水晶球,我可以猜到您得到的是Win32错误代码,这可能意味着您使用的句柄无效

看到您使用了
从\u this
启用\u shared\u,我可以猜测这会导致您的问题(尽管代码中没有显示)


我的最佳猜测是,您可能正在构造函数内部使用此中的
shared\u(这会导致错误)。

在Windows上,异步连接最终将成为对Windows Vista之前的操作系统不支持的调用

因此,最重要的问题,IMHO,是您试图在哪个操作系统上运行代码


假设您运行的是ConnectEx支持的操作系统,下一步检查是您没有安装任何可能阻止使用ConnectEx的LSP。(检查这一点最简单的方法可能是在相关操作系统的干净安装虚拟机上运行代码)

在Windows上,异步连接最终将成为对Windows Vista之前的操作系统不支持的调用

因此,最重要的问题,IMHO,是您试图在哪个操作系统上运行代码


假设您运行的是ConnectEx支持的操作系统,下一步检查是您没有安装任何可能阻止使用ConnectEx的LSP。(检查这一点最简单的方法可能是在相关操作系统的干净安装虚拟机上运行代码)

在Windows上,异步连接最终将成为对Windows Vista之前的操作系统不支持的调用

因此,最重要的问题,IMHO,是您试图在哪个操作系统上运行代码


假设您运行的是ConnectEx支持的操作系统,下一步检查是您没有安装任何可能阻止使用ConnectEx的LSP。(检查这一点最简单的方法可能是在相关操作系统的干净安装虚拟机上运行代码)

在Windows上,异步连接最终将成为对Windows Vista之前的操作系统不支持的调用

因此,最重要的问题,IMHO,是您试图在哪个操作系统上运行代码


假设您运行的是ConnectEx支持的操作系统,下一步检查是您没有安装任何可能阻止使用ConnectEx的LSP。(检查这一点最简单的方法可能是在相关操作系统的干净安装虚拟机上运行代码)

它不会在
//错误处出错,原因很简单,异步操作不会内联执行。因此,您可能是说,如果您在该点之前停止(或将其注释掉),您不会得到相同的错误?它不会在
//此处的错误处出错,原因很简单,异步操作不会内联执行。因此,您可能是说,如果您在该点之前停止(或将其注释掉),您不会得到相同的错误?它不会在
//此处的错误处出错,原因很简单,异步操作不会内联执行。因此,您可能是说,如果您在该点之前停止(或将其注释掉),您不会得到相同的错误?它不会在
//此处的错误处出错,原因很简单,异步操作不会内联执行。所以你的意思可能是,如果你在那一点之前停下来(或我的评论)