Comment détecter le moment où un coup de pouce socket tcp déconnecte

Supposons que j'ai un culot:

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)) );

Et je stocker un weak à ladite prise dans un récipient. J'ai besoin de cela parce que je veux autoriser les clients à la demande pour une liste d'autres clients, afin qu'ils puissent envoyer des messages les uns aux autres.

clients_.insert(socket);  //pseudocode

Puis-je exécuter certaines opérations asynchrones

socket->async_receive( boost::asio::buffer(&(*header), sizeof(Header))
    , 0
    , std::bind(handleReceiveHeader, this, std::placeholders::_1, std::placeholders::_2, header, socket));

Comment puis-je détecter lorsque la connexion est fermée, donc je peux supprimer mon socket du conteneur?

clients_.erase(socket); //pseudocode

OriginalL'auteur aCuria | 2013-11-10