Как правило, после того, как вы позвонили на io_service::run
, часто мало причин позвонить на io_service::stop
или io_service::reset
.
В приведенном выше коде метод connect
- это , а не , который собирается активно устанавливать соединение - tcp::resolver::resolve
просто превращает запрос (например, имя хоста или IP-адрес и т. Д.) В конечная точка TCP, которую можно использовать для подключения сокета. Обычно вам нужно разыменовать итератор, возвращаемый resolver::resolve
, и передать его в boost::asio::ip::tcp::socket
метод connect
объекта (или одного из асинхронных вариантов) для соединения с конечной точкой.
Хороший пример тому - учебники по Asio. См. Первый пример синхронного TCP-сервера для дневного времени здесь: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime1.html. Обратите внимание, что сначала выполняется код:
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
чтобы превратить объект запроса в конечную точку TCP, а затем:
socket.connect(*endpoint_iterator++, error);
для подключения объекта сокета к этой конечной точке.
Что касается метода disconnect
, это полностью зависит от приложения. Но обычно вам необходимо отслеживать активное соединение, инкапсулируя объект socket
, который вы можете при необходимости закрыть при вызове disconnect
. Для примера рассмотрим учебник под названием «Daytime 3 - Асинхронный TCP-сервер в дневное время» здесь: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime3.html