我在連接到另一個套接字後將套接字連接到端點時遇到了問題。在Windows中使用Boost asio重新連接套接字
情況是這樣的:
一個)的boost::asio::ip::tcp::socket
被連接到遠程主機(比如pop.remote1.com)。
B)時,傳輸結束,並關閉套接字:
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, error);
socket_.close(error);
然後,嘗試連接到另一臺主機(當發言權pop.remote2.com),在使用相同的過程a),該過程沒有錯誤返回,但套接字保持關閉狀態。
注意,使用pop.remote2.com作爲第一個連接時,事情辦得好吧,如果嘗試關閉後連接到pop.remote1.com出現同樣問題。
在這兩種情況下,附件io_service
中都沒有掛起的進程。
的問題是:
是再連接受理?
這是假設的正確過程嗎?
在此先感謝。
P.D: 我試圖在重新連接之前打開套接字,但結果保持不變。也就是說,如果在關閉之前的連接後結果相同。
socket_.shutdown(...);
socket_.close(...);
用於
socket_.open(...);
socket_.async_connect(...);
或只是
socket_.async_connect(...);
最後一個想法:
花了一段時間後,對這個問題,並做一些調試與MS Visual Studio中,我認爲這是不可能的,至少在阿西奧訴1.45.0; Windows 32和VC++。
也許問題是,在這裏 - 所有人都在思考和使用對象,如果有時需要重新連接,只需刪除適當的對象,並建立一個新的連接...創建一個新的對象!
這是我在我的應用程序中所做的解決方案,取得了良好的效果,並帶有一些額外的代碼。
HTH給別人。
如何重新連接插座? – 2011-03-04 13:37:34
@Stefan感謝您的關注。正如我告訴Sam Miller,爲了重新使用,我使用了一個簡單的'async_connect()',但沒有成功 - 第一次連接的應用程序 - 。 – 2011-03-04 21:44:46
相關:http://stackoverflow.com/questions/3062803/how-do-i-cleanly-reconnect-a-boostsocket-following-a-disconnect – GrahamS 2011-03-09 11:04:52