Boost C++ 库

……它是世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

basic_seq_packet_socket::cancel (2 个重载中的第 2 个) - Boost C++ 函数库
PrevUpHomeNext

继承自 basic_socket。

取消与套接字关联的所有异步操作。

void cancel(
    boost::system::error_code & ec);

此函数会立即完成所有挂起的异步连接、发送和接收操作,并且被取消操作的处理程序将收到 boost::asio::error::operation_aborted 错误。

参数

ec

用于指示发生何种错误(如果有)。

备注

在 Windows XP、Windows Server 2003 以及更早版本的 Windows 上运行 cancel() 调用时,除非定义了 BOOST_ASIO_ENABLE_CANCELIO,否则将始终以 boost::asio::error::operation_not_supported 错误失败。但是,CancelIo 函数存在两个问题,在使用其功能之前应予考虑。

  • 它只会取消在当前线程中发起的异步操作。
  • 它可能看似成功完成,但操作系统可能会静默忽略取消未完成操作的请求。它是否有效似乎取决于安装的驱动程序。

为了实现可移植的取消,请考虑使用以下替代方法之一

  • 通过定义 BOOST_ASIO_DISABLE_IOCP 来禁用 asio 的 I/O 完成端口后端。
  • 使用 close() 函数可同时取消挂起的操作并关闭套接字。

在 Windows Vista、Windows Server 2008 及更高版本上运行时,将始终使用 CancelIoEx 函数。此函数没有上述问题。


PrevUpHomeNext