c++ - 使用 boost::asio::ip::tcp::socket::cancel() 和 socket::close()

标签 c++ sockets boost boost-asio

如果我使用关闭而不是取消,会有一些问题。

close 函数可以关闭套接字,并通过返回 boost::asio::error::operation_aborted 错误来停止任何未完成的异步操作。

为什么我应该使用cancel而不是close

我担心如果一些异步操作正在执行,cancel 无法取消它,是吗?

asio::ip::tcp::resolve::cancel,我多次尝试在调用async_resolve后取消resolve_handler , 但 resolve_handler 返回时总是没有 boost::asio::error::operation_aborted 错误。

我认为 resolve_handler 正在执行?

是吗?

最佳答案

如果您想在不关闭套接字的情况下停止挂起的操作,则取消很有用。

请注意 Boost documentation建议使用 close 以获得更好的可移植性(来自文档页面):

... For portable cancellation, consider using one of the following alternatives:

  • Disable asio's I/O completion port backend by defining BOOST_ASIO_DISABLE_IOCP.
  • Use the close() function to simultaneously cancel the outstanding operations and close the socket.

关于c++ - 使用 boost::asio::ip::tcp::socket::cancel() 和 socket::close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434316/

相关文章:

c++ - 如何在 C++ 中通过我的应用程序共享 "this"实例?

c++ - 在没有条件 IF 语句的情况下查找数字的最大值 C++

c - 是否可以使用套接字使用连接代理?

Python套接字仅在浏览器上拒绝连接

c++ - 如何在 C++ 的单元格中读取带有换行符和逗号字符的 CSV 文件

c++ - 如何在 Go 中使用 C++

javascript - 多个套接字客户端

c++ - 我可以使用 Boost::Asio 而不用担心网络编程问题吗?

c++ - 使用 MS VC++ 2008 构建的 HDF5 和使用 MS VC++ 2010 + boost 1.45.0 构建的应用程序中的 boost 1.39.0 库

c++ - 来自 boost 的警告