Ce n'boost::asio::ip::tcp::resolver::iterator faire?
Je commence avec boost asio de la programmation en C++ et en y regardant de plus les exemples que j'ai juste ne peux pas comprendre ce qui ne boost::asio::ip::tcp::resolver::iterator
faire.
Code:
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(argv[1]);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
socket.close();
socket.connect(*endpoint_iterator++, error);
}
S'il vous plaît aidez-moi et excusez-moi si ma question ne fournissent pas suffisamment d'informations.
Dois aimer le coup de pouce.asio espaces de noms. barf
Pour info: la requête est pour un service uniquement. si vous êtes à la recherche d'un hôte spécifique fpr d'un service, vous devez ajouter un autre paramètre tcp::résolveur::query ctor.
Pour info: la requête est pour un service uniquement. si vous êtes à la recherche d'un hôte spécifique fpr d'un service, vous devez ajouter un autre paramètre tcp::résolveur::query ctor.
OriginalL'auteur Hami | 2011-02-24
Vous devez vous connecter pour publier un commentaire.
boost::asio::ip::tcp::resolver::iterator
parcourt la liste d'adresses de l'hôte que vous avez spécifié (les hôtes peuvent disposer de plusieurs adresses).Comme un std::string::iterator parcourt ses personnages, boost::asio::ip::tcp::resolver::iterator parcourt sa liste d'adresses.
Le code suivant:
tente d'établir une connexion à chaque extrémité jusqu'à ce qu'il réussisse ou à court de points de terminaison (merci pour la correction Eugen Constantin Dinca).
while
tente de se connecter à chaque extrémité jusqu'à ce qu'il réussisse ou qu'il est à court de points de terminaison. Donc, à plus de 1 extrémité sera connecté à la fin de la boucle.Pourquoi faut-il utiliser *endpoint_iterator++ au lieu de endpoint_iterator++? Pourquoi auriez-vous besoin de pointeurs?
n'est pas un pointeur, il semble juste et qui se comporte comme un. Le postfix opérateur d'incrémentation (
operator++(int)
) obtient la prochaine iterator après l'opérateur d'indirection (operator*()
) obtient le sous-jacentendpoint
et le renvoie àsocket::connect()
. Si la connexion échoue,error
est définie et la boucle continue. Ce sont les mêmes concepts utilisés par les itérateurs dans la Bibliothèque de modèles Standard.OriginalL'auteur Marlon