我正在爲我的服務器應用程序使用boost異步套接字。我創建了一個disconnect()函數,它調用boost的close(),然後刪除套接字(操作符delete)。 當從一個異步方式調用該函數時,它是正常的。處理程序,但是當我從主代碼庫中調用它時,整個應用程序在其中一個異步處理程序中崩潰。 如何在boost中很好地關閉套接字?Boost :: asio套接字 - 如何徹底斷開它們?
4
A
回答
2
確保只要可能使用它的處理程序存在,對象就處於活動狀態。
很可能使用你調用close(因爲它 報告錯誤處理程序)後,然後接入到死指針這個插座被稱爲處理程序之一...
通常情況下,續航時間處理可能是什麼可以用boost::shared_ptr
和boost::enable_shared_from_this
輕鬆完成,並將其傳遞給處理程序。查看Boost.Asio提供的許多示例。
一旦你熟悉了這種技術,你問的問題對你來說看起來微不足道。
1
您確實想查看套接字上的關閉方法。它不會解決你的崩潰應用程序。上面的Artyom已經解釋了原因,但它仍然很有趣。 如果您在未調用關閉的情況下關閉套接字,則可能會導致發送RST而不是優雅的FIN握手。
相關問題
- 1. BOOST ASIO - 異步套接字
- 2. Boost ASIO如何receive_from返回底層套接字錯誤?
- 3. boost asio unix套接字重用
- 4. Boost Asio延遲寫入TCP套接字
- 5. C++ Boost ASIO套接字錯誤
- 6. 如何徹底阻止tomcat而我有套接字和線程
- 7. 如何將boost :: asio套接字轉換爲C++/CLI .Net套接字?
- 8. 如何使用boost :: asio從網絡中斷中恢復如何使用boost :: asio
- 9. 在Windows中使用Boost asio重新連接套接字
- 10. boost :: asio - 窺探到套接字緩衝區
- 11. boost asio udp套接字連接無效參數(IPv6)
- 12. 使用Boost :: Asio套接字看到500ms在讀
- 13. boost :: asio從套接字讀取n個字節到streambuf
- 14. surefire如何徹底關機?
- 15. 如何檢測套接字斷開?
- 16. boost asio - 套接字類的內存管理
- 17. Boost Asio:檢查套接字的可讀寫性
- 18. boost asio ssl流套接字編譯問題
- 19. 徹底和徹底搞砸了svn回購 - 如何開始新鮮
- 20. 如何檢查套接字連接是否存在於Boost :: asio中?
- 21. 如何使用boost :: asio使套接字連接保持活動狀態?
- 22. boost :: asio :: async_read和boost :: asio :: streambuf
- 23. 套接字java斷開
- 24. 套接字斷開行爲
- 25. Boost Asio UDP服務器套接字偵聽指定的IP
- 26. 提升Asio和Web套接字?
- 27. 異步寫入套接字和用戶值(boost :: asio問題)
- 28. 編寫串行化數據到一個套接字與boost :: asio
- 29. 如何連接兩個boost :: asio :: streambuf的?
- 30. 如何使用boost asio連接到elasticsearch?
我不想使用智能指針,因爲原始指針對我來說更爲原生。 – vladimir 2010-12-09 11:35:38
@vladimir,只是因爲你覺得某些東西更本土,並不是很好的做法。智能指針解決了許多問題,否則可以成爲一個ballache :) – 2010-12-09 11:37:21