Унаследовано от basic_socket.
Отменить все асинхронные операции, связанные с розеткой.
void cancel();
Эта функция приводит к тому, что все выдающиеся асинхронные операции подключения, отправки и получения завершаются немедленно, и обработчики для отмененных операций будут переданы по ошибке boost::asio::error:: Operation_aborted
.
- boost::system::system_error
Выброшен на провал.
Звонки на cancel()
всегда не будут работать с boost::::error:: Operation_not_supported
при запуске на Windows XP, Windows Server 2003 и более ранних версиях Windows, если не определен BOOST_ASIO_ENABLE_CANCELIO. Однако функция CancelIo имеет две проблемы, которые следует рассмотреть, прежде чем разрешить ее использование:
- Он отменит только асинхронные операции, которые были начаты в текущем потоке.
- Это может показаться полным без ошибок, но запрос на отмену незавершенных операций может молча игнорироваться операционной системой. Работает он или нет, зависит от установленных драйверов.
Для переносной отмены рассмотрите возможность использования одной из следующих альтернатив:
- Отключить порт завершения ввода/вывода Asio, определив BOOST_ASIO_DISABLE_IOCP.
- Используйте функцию
close()
, чтобы одновременно отменить невыполненные операции и закрыть розетку.
При работе на Windows Vista, Windows Server 2008 и более поздней версии всегда используется функция CancelIoEx. Эта функция не имеет проблем, описанных выше.