Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows中用Boost asio重新连接插座_C++_Windows_Boost_Boost Asio - Fatal编程技术网

C++ 在Windows中用Boost asio重新连接插座

C++ 在Windows中用Boost asio重新连接插座,c++,windows,boost,boost-asio,C++,Windows,Boost,Boost Asio,在连接到另一个端点后,将套接字连接到端点时遇到问题 情况就是这样: a)该boost::asio::ip::tcp::socket连接到远程主机(比如pop.remote1.com) b)变速器结束,插座关闭: socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, error); socket_.close(error); 然后,当尝试使用与在a)中相同的过程连接到另一个主机(例如pop.remote2.com)时,该过

在连接到另一个端点后,将套接字连接到端点时遇到问题

情况就是这样:

a)
boost::asio::ip::tcp::socket
连接到远程主机(比如pop.remote1.com

b)变速器结束,插座关闭:

 socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, error);
 socket_.close(error);
然后,当尝试使用与在a)中相同的过程连接到另一个主机(例如pop.remote2.com)时,该过程将返回,但套接字保持关闭状态

请注意,当使用pop.remote2.com作为第一个连接时,运行正常,如果在关闭后尝试连接到pop.remote1.com,则会出现相同的问题

在这两种情况下,附加的
io\u服务中都没有挂起的进程

问题是:

这种重新连接可以接受吗

这应该是正确的过程吗

提前谢谢

p.D.: 在重新连接之前,我试图打开插座,但结果保持不变。也就是说,如果在关闭与的上一个连接后,结果相同

 socket_.shutdown(...);
 socket_.close(...);
使用

 socket_.open(...);
 socket_.async_connect( ... );
或者只是

 socket_.async_connect( ... );
最后一个想法:

在花了一些时间研究这个问题,并用MSVisualStudio进行了一些调试之后,我认为这是不可能的,至少在ASIOV中是不可能的。1.45.0; windows32和VC++

也许问题是,在Boost Library,所有人都在思考和使用对象,如果有时需要重新连接,只需删除适当的对象,然后进行新的连接。。。创建一个新对象

这就是我在我的应用程序中所做的解决方案,虽然有一些额外的代码,但效果很好

对其他人

这种重新连接可以接受吗

这应该是正确的过程吗

是和否。如果您在
关闭上一个插座后没有打开插座进行后续连接,则需要这样做。例:

socket_.open();
socket_.async_connect( ... );
这种重新连接可以接受吗

这应该是正确的过程吗

是和否。如果您在
关闭上一个插座后没有打开插座进行后续连接,则需要这样做。例:

socket_.open();
socket_.async_connect( ... );

如何重新连接插座?@Stefan感谢您的关注。正如我告诉Sam Miller的那样,为了说明问题,我使用了一个简单的“async_connect()”,但没有成功-第一次连接的例子-相关:如何重新连接套接字?@Stefan感谢您的关注。正如我告诉Sam Miller的那样,我使用了一个简单的“async_connect()”,但没有成功-第一次连接的例子。相关:非常感谢您的回答。为了重新连接,我使用了一些lilke:
socket\uu.async\u connect(endpoint,boost::bind(&hndlConnect,this,boost::asio::placeholders::error,++endpoint\u迭代器))每次都有效,顺便说一句,文档说:“如果套接字尚未打开,它将自动打开”。无论如何,在重新连接之前,我将尝试您的打开建议,看看会发生什么。@如果您是正确的,async_connect将隐式打开尚未打开的套接字。我不清楚你有什么问题。你能更新你的问题来澄清它吗?例如,您在连接处理程序中得到了什么错误代码?非常感谢您的回答。为了重新连接,我使用了一些lilke:
socket\uu.async\u connect(endpoint,boost::bind(&hndlConnect,this,boost::asio::placeholders::error,++endpoint\u迭代器))每次都有效,顺便说一句,文档说:“如果套接字尚未打开,它将自动打开”。无论如何,在重新连接之前,我将尝试您的打开建议,看看会发生什么。@如果您是正确的,async_connect将隐式打开尚未打开的套接字。我不清楚你有什么问题。你能更新你的问题来澄清它吗?例如,在连接处理程序中会得到什么错误代码?