| Home | Libraries | People | FAQ | More

##### basic_datagram_socket::cancel (1 of 2 overloads)

Inherited from basic_socket.

Cancel all asynchronous operations associated with the socket.

    void cancel();

This function causes all outstanding asynchronous connect, send and receive operations to finish immediately, and the handlers for cancelled operations will be passed the `boost::asio::error::operation_aborted` error.

###### Exceptions

boost::system::system_error

  Thrown on failure.

###### Remarks

Calls to `cancel()` will always fail with `boost::asio::error::operation_not_supported` when run on Windows XP, Windows Server 2003, and earlier versions of Windows, unless BOOST_ASIO_ENABLE_CANCELIO is defined. However, the CancelIo function has two issues that should be considered before enabling its use:

- It will only cancel asynchronous operations that were initiated in the current thread.
- It can appear to complete without error, but the request to cancel the unfinished operations may be silently ignored by the operating system. Whether it works or not seems to depend on the drivers that are installed.

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.

When running on Windows Vista, Windows Server 2008, and later, the CancelIoEx function is always used. This function does not have the problems described above.