我正在为我的服务器应用程序使用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干净地断开连接
- 4. Boost asio网络断开连接处理
- 5. boost asio有状态套接字接口
- 6. 关于boost :: asio套接字和阻塞
- 7. boost asio unix套接字重用
- 8. boost :: asio扩展TCP套接字
- 9. Boost Asio延迟写入TCP套接字
- 10. AF_NETLINK套接字(netlink)使用boost :: asio
- 11. C++ Boost ASIO套接字错误
- 12. 如何彻底阻止tomcat而我有套接字和线程
- 13. 如何将C++/CLI .Net套接字转换为boost :: asio套接字?
- 14. 如何将boost :: asio套接字转换为C++/CLI .Net套接字?
- 15. 如何正确关闭boost :: asio中的套接字?
- 16. Boost(.asio)链接
- 17. 如何使用boost :: asio从网络中断中恢复如何使用boost :: asio
- 18. 在Windows中使用Boost asio重新连接套接字
- 19. 如何在离开它时彻底摧毁窗体。
- 20. boost :: asio - 窥探到套接字缓冲区
- 21. boost asio udp套接字连接无效参数(IPv6)
- 22. surefire如何彻底关机?
- 23. 使用Boost :: Asio套接字看到500ms在读
- 24. boost :: asio tcp服务器断开连接问题
- 25. boost :: asio从套接字读取n个字节到streambuf
- 26. 如何检测套接字断开?
- 27. 如何模拟套接字断开?
- 28. 在Android中,如何断开套接字?
- 29. boost :: asio :: acceptor在win7挂断
- 30. boost asio - 套接字类的内存管理
我不想使用智能指针,因为原始指针对我来说更为原生。 – vladimir 2010-12-09 11:35:38
@vladimir,只是因为你觉得某些东西更本土,并不是很好的做法。智能指针解决了许多问题,否则可以成为一个ballache :) – 2010-12-09 11:37:21