Предположим, у меня есть гнездо:Как определить, когда сокет подталкивание TCP разъединяет
std::shared_ptr<tcp::socket> socket(new tcp::socket(acceptor.get_io_service()));
acceptor.async_accept(*socket, std::bind(handleAccept, this, std::placeholders::_1, socket, std::ref(acceptor)));
И я хранить weak_ptr к указанной розетки в контейнере. Мне нужно это, потому что я хочу разрешить клиентам запрашивать список других клиентов, чтобы они могли отправлять сообщения друг другу.
clients_.insert(socket); // pseudocode
Затем я запускаю некоторые операции асинхронных
socket->async_receive(boost::asio::buffer(&(*header), sizeof(Header))
, 0
, std::bind(handleReceiveHeader, this, std::placeholders::_1, std::placeholders::_2, header, socket));
Как определить, когда соединение закрывается, так что я могу удалить мой сокет из контейнера?
clients_.erase(socket); // pseudocode
Список ошибок можно найти здесь: http: // www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/reference/error__basic_errors.html – aCuria
Я обнаружил, что это действительно работает, я получаю сообщение об ошибке «connection_reset». Однако в документации я заметил еще один код ошибки «connection_aborted». Нужно ли обрабатывать этот код ошибки? – aCuria
Это полезная ссылка @aCuria. Другим источником кодов ошибок является файл 'boost/system/error_code.hpp'. Что касается ошибки «connection_aborted», я не видел ее в своих приложениях, но в тестировании также нет вреда. – kenba