boost - 关闭带有挂起连接的 boost::asio::ip::tcp::socket

标签 boost boost-asio

根据 boost asio 文档,如果我在具有异步连接操作挂起的套接字上调用 close,处理程序将被“立即”调用并带有错误代码。从文档:

This function is used to close the socket. Any asynchronous send, receive or connect operations will be cancelled immediately, and will complete with the boost::asio::error::operation_aborted error.



但是处理程序实际上并不是立即/同步调用的,而是在控制权返回到 io_service 时异步调用的。是否有可能我的连接处理程序仍然被调用 没有 如果连接实际成功并且我的处理程序回调已发布到 io_service,则调用 close 后出现错误代码?

最佳答案

文档指出,未完成的操作将立即取消,而不是立即调用。

有可能连接操作已经完成,处理程序在 io_service 中排队用于延迟调用及其 error_codeboost::system::errc::success .可能值得考虑检查套接字 is_open() 在完成处理程序中,如在 this 中所做的那样回答。有关此行为的更多详细信息,请参阅 this回答。

关于boost - 关闭带有挂起连接的 boost::asio::ip::tcp::socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715487/

相关文章:

c++ - 如何将使用 boost::asio 的 native C++ 静态库导入 CLI/C++ 混合模式应用程序?

c++ - 在 ARM 架构上构建时,使用 boost 的动态库具有 undefined reference

c++ - 使用 boost::asio 丢弃数据

c++ - 我可以将什么值传递给 stream_socket_service::receive 中的 message_flags 属性

c++ - Cmake不会将汇编程序标志设置为armasm(对于WinCE)

c++ - 限制模板实例化中的参数类型

c++ - boost::uuids::random_generator 和多线程的唯一性

c++ - 一直读到 boost::asio::streambuf 中的字符串定界符

c++ - 循环调用 boost io_service poll

c++ - 消息顺序不正确(使用 io_service::wrap)