что отличается между boost :: asio :: ip :: tcp :: socket :: cancel и socket :: close - PullRequest
1 голос
/ 21 июня 2011

Согласно расширенной документации, при вызове socket::close() асинхронные операции отправки, получения или подключения будут немедленно отменены и завершатся с ошибкой boost::asio::error::operation_aborted.

socket::cancel вызывает все невыполненные асинхронныеОперации подключения, отправки и получения должны быть немедленно завершены, и обработчикам отмененных операций будет передано сообщение об ошибке boost::asio::error::operation_aborted.

Есть ли какая-то разница между ними?

Когда я хочу завершить одно соединение с сокетом, какое из них мне следует вызвать так, чтобы их обработчик обратного вызова был вызван с ошибкой boost::asio::error::operation_aborted?

1 Ответ

6 голосов
/ 22 июня 2011

Есть ли какая-то разница между ними?

Да. Метод close() закрывает сокет, а метод cancel() отменяет незавершенные асинхронные операции. Использование cancel() не закрывает сокет.

Когда я хочу закончить один сокет соединение, которое мне следует назвать?

Вы должны использовать cancel(), чтобы остановить любые незавершенные асинхронные операции. Сокет будет закрыт деструктором.

...