将套接字连接到另一个端点后,我遇到了麻烦。
情况就是这样:
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 )时,proccess会返回而不会出错,但是插座保持关闭状态。
请注意,当使用 pop.remote2.com 作为第一个连接时,运行正常,如果尝试连接到 pop.remote1.com 关闭后。
在这两种情况下,附加的io_service
中都没有待处理的进程。
问题是:
重新连接是否可以接受?
这是假设正确的过程吗?
提前致谢。
Pd积: 我试图在重新连接之前打开套接字,但结果保持不变。也就是说,如果在使用。
关闭之前的连接后,结果是相同的 socket_.shutdown(...);
socket_.close(...);
用于
socket_.open(...);
socket_.async_connect( ... );
或只是
socket_.async_connect( ... );
最后的想法:
在花了一些时间解决问题,并使用MS Visual Studio进行一些调试后,我认为这是不可能的,至少在Asio v.1.45.0中是这样; Windows 32和VC ++。
也许问题是这里-at Boost图书馆 - 所有人都在思考和使用对象,如果有时需要重新连接,只需删除适当的对象,并建立新的连接......创建一个新对象!
这是我在我的应用程序中所做的解决方案,取得了良好的效果,并且需要一些额外的代码。
> HTH对其他人。答案 0 :(得分:0)
重新连接是否可以接受?
是
是的,没有。如果您在为前一个连接这是假设正确的过程吗?
close
之后没有为后续连接打开套接字,则需要执行此操作。例如:
socket_.open();
socket_.async_connect( ... );