C++ 在Windows中用Boost asio重新连接插座
在连接到另一个端点后,将套接字连接到端点时遇到问题 情况就是这样: a)该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)时,该过
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将隐式打开尚未打开的套接字。我不清楚你有什么问题。你能更新你的问题来澄清它吗?例如,在连接处理程序中会得到什么错误代码?