Предположим, что у меня есть сокет:
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