【发布时间】:2011-03-04 11:36:25
【问题描述】:
我在将一个套接字连接到另一个端点后遇到问题。
情况是这样的:
a)boost::asio::ip::tcp::socket 连接到远程主机(例如 pop.remote1.com)。
b)传输结束,socket关闭:
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, error);
socket_.close(error);
然后,当尝试使用与 a) 中相同的进程连接到另一台主机(例如 pop.remote2.com)时,该进程返回且没有错误,但套接字保持关闭。
注意,当使用 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++。
也许问题在于,在 Boost 库中,所有人都在思考和使用对象,如果有时需要重新连接,只需删除适当的对象,然后进行新的连接……创建一个新对象!
这是我在我的应用程序中使用的解决方案,效果很好,我想了一些额外的代码。
HTH 给其他人。
【问题讨论】:
-
如何重新连接套接字?
-
@Stefan 感谢您的关注。正如我告诉 Sam Miller 的那样,要重新连接,我使用了一个普通的 'async_connect()' 没有成功 - 第一个连接的设备 -。
标签: c++ windows boost boost-asio